2

これはおそらく非常に基本的な質問です。

私は最終的に私が言うことを可能にするDSLに取り組んでいます:

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

私はインタプリタ関数runCWMWLの作業を始めたばかりですが、do-blockの内側または外側のいずれかで実際のHaskellに何らかの方法で(そしてどのように)逃げることができるのだろうかと思います。

インタープリター内のいくつかの必要なプレリュード関数(などprint)にdefautl-wrapperを提供することを考えましたが、通常のライブラリのみに戻ることなく、DSLとHaskellを共同で配置するよりエレガントな方法があるのではないかと思います。

4

1 に答える 1

5

TemplateHaskellのQuasiQuotingをご覧ください。あなたがしている可能性があります

import Language.CWMWL

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

また

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

またはあなたに合ったものなら何でも。

于 2012-12-02T22:44:27.433 に答える