2011-07-05 35 views
19

我想在我的一個Haskell應用程序中嵌入一個Haskell REPL。這個想法是,默認情況下,只有Haskell庫的一個子集會加載我自己的一組函數,並且用戶將使用這些函數來與環境進行交互。在Haskell應用程序中創建一個Haskell REPL

爲了解決這個問題,我知道一種方法是創建一個(迷你)Haskell解析器+評估器,並將我的迷你Haskell解析器的函數映射到實際的Haskell函數,但我相信有更好的方法做這個。

是否有一個很好的和乾淨的方式來使用Haskell爲Haskell構建REPL?

+0

正在爲您使用GHC庫嗎? (他們提供了很多方式與已編譯的Haskell代碼交互) – fuz

+0

是的,這是一個選項,但我沒有使用它們的經驗。你能指導我到正確的圖書館,以便我可以看看他們嗎? – CharlieP

+0

看看[haskell.org](http://haskell.org/haskellwiki/GHC/As_a_library)怎麼樣? – fuz

回答

10

已經存在的幾件事情:

  • GHCI,當然,無論是在能看到它是如何實現的或能夠直接使用它的意義(即,有你的REPL只是說說而已通過標準輸入/標準輸出到GHCi)。
  • full GHC API,它可以讓你掛接到GHC,讓它做所有繁重的你 - 加載文件,追逐的依賴關係,分析,類型檢查等
  • hint,這是周圍的一個子集的包裝GHC API,側重於交互式解釋而不是彙編 - 這似乎適合你想要做的事情。
  • mueval,對加載模塊,資源使用等有限制的評估者,基本上是「安全」的交互模式。這是lambdabot使用的,如果你曾經在#haskell IRC頻道。

以上所有都假設您不想自己編寫一個Haskell解釋器,這可能是這種情況。