这可以在没有Quasi Quoter的情况下完成吗?

问题描述:

我有一个很小的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

除非我的误解,我不认为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