2013-02-16 174 views
0

我有一個很小的DSL,實際上工作得很好。當我說這可以在沒有Quasi Quoter的情況下完成嗎?

import language.CWMWL 

main = runCWMWL $ do 
    out (matrixMult, A, 1, row, 1 3 44 6 7) 

然後runCWMWL是由language.CWMWL導出的函數。這解析了預測並採取了一些行動。

我想實現的是,有一些方法來重複這個例如1000次,並且元組的第三個元素由數字1到1000組成。我自己的DSL不夠完整。最後我想改變最後一個元素中的字符串。

是否有可能這樣做沒有準行情?準引號是最好的工具嗎?

什麼binops /原語將我的DSL需要包含或需要爲了讓這個以優雅的方式來包裝?

+2

在該元組的最後一個字段中,語法上發生了什麼? – jberryman 2013-02-17 00:57:37

+0

空格分隔列表。 – 2013-02-17 09:22:31

回答

2

除非我的誤解,我不認爲quasiquotation將讓你的其他想法的東西比

main = runCWMWL $ 
    sequence [ out (matrixMult, A, n, row, 1 3 44 6 7) | n <- [1..1000] ] 

好得多你也可以考慮MonadComprehensions以及RebindableSyntax

+0

......好吧,實際上我認爲quasiquotation解決方案會在編譯時擴展,而我不知道GHC會對上述做多少評估。 – jberryman 2013-02-17 01:34:22

+0

當然,你對一切都適用。第二種方法是相應地擴展DSL,但是我目前沒有看到需要添加什麼binops和primitives。我編輯了這個問題。 – 2013-02-17 09:53:10

相關問題