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