2
这可能是一个非常基本的问题。在Haskell中实现DSL
我在DSL工作是eventuyally会允许我说:
import language.cwmwl
main = runCWMWL $ do
eval ("isFib::", 1000, ?BOOL)
我刚开始对翻译功能runCWMWL工作,我不知道是否有可能逃脱真正的Haskell不知何故(以及如何?)在do-block内部或外部。
我想为我的解释器中的一些必需的前奏功能(如print
)提供一个defautl包装器,但我想知道是否有更优雅的方式共同loacate DSL和Haskell而不会回落成为普通库只要。
我不明白你的代码,但'?BOOL'似乎不是Haskell? –
@NiklasB它是理想情况下应该成为浅层(?)嵌入式DSL的一部分。 –
如果'CWMWL'是一个monad,那么你只需要为[MonadIO]编写一个实例(http://hackage.haskell.org/packages/archive/transformers/latest/doc/html/Control-Monad-IO- Class.html)类。如何在您的DSL中嵌入IO操作以及如何使用'runCWMWL'运行它们将由您决定。 – JJJ