在Haskell中实现DSL

时间:2012-12-02 14:41:55

标签: haskell

这可能是一个非常基本的问题。

我正在开发一款最终允许我说出的DSL:

import language.cwmwl
main = runCWMWL $ do
    eval ("isFib::", 1000, ?BOOL)

我刚刚开始研究解释函数runCWMWL,我想知道是否有可能以某种方式(以及如何?)在do-block内部或外部转移到真正的Haskell。

我想在我的解释器中为一些必需的前奏函数(例如print)提供一个defautl-wrapper,但是我想知道是否有更优雅的方法来共同放弃DSL和Haskell而不会回归到只是一个普通的图书馆。

1 个答案:

答案 0 :(得分:5)

Template Haskell查看QuasiQuoting。你可能正在做

import Language.CWMWL

main = runCWMWL [eval|
     ("isFib::", 1000, ?BOOL) |]

main = [run|("isFib::", 1000, ?BOOL) |]

或任何适合你的。