2

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

我正在研究一个最终允许我说的 DSL:

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

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

我想在我的解释器中为一些必需的前奏函数(例如print)提供一个默认包装器,但我想知道是否有更优雅的方法来共同定位 DSL 和 Haskell,而不会退回到只是一个普通的库。

4

1 回答 1

5

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

import Language.CWMWL

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

或者

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

或任何适合你的东西。

于 2012-12-02T22:44:27.433 回答