这可能是一个非常基本的问题。
我正在开发一种 DSL,最终我可以说:
import language.cwmwl
main = runCWMWL $ do
eval ("isFib::", 1000, ?BOOL)
我刚刚开始研究解释器函数 runCWMWL,我想知道是否有可能以某种方式(以及如何?)在 do block 内部或外部转义到真正的 Haskell。
我想在我的解释器中为一些必需的 prelude 函数(例如 print
)提供一个默认包装器,但我想知道是否有更优雅的方法来共同定位 DSL 和 Haskell 而不会失败恢复为普通图书馆。
最佳答案
查看 Template Haskell 中的 QuasiQuoting 。你可能会做
import Language.CWMWL
main = runCWMWL [eval|
("isFib::", 1000, ?BOOL) |]
或
main = [run|("isFib::", 1000, ?BOOL) |]
或者任何适合你的东西。
关于haskell - 在 Haskell 中实现 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670313/