在Haskell中实现DSL

J F*_*sch 2 haskell

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

我正在制作一个最终允许我说的DSL:

import language.cwmwl
main = runCWMWL $ do
    eval ("isFib::", 1000, ?BOOL)
Run Code Online (Sandbox Code Playgroud)

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

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

And*_*ewC 5

Template Haskell查看QuasiQuoting .你可能会这样做

import Language.CWMWL

main = runCWMWL [eval|
     ("isFib::", 1000, ?BOOL) |]
Run Code Online (Sandbox Code Playgroud)

要么

main = [run|("isFib::", 1000, ?BOOL) |]
Run Code Online (Sandbox Code Playgroud)

或任何适合你的.