2011-02-20 132 views
4

我正在尋找一種方法來從一個字符串加載Haskell函數來運行。我事先知道類型,但不知道函數的內容。加載動態哈希克爾模塊

理想情況下,解決方案會很快,不需要在IO中運行。

我一直在尋找提示(Language.Haskell.Interpreter),但它不適合帳單(eval調用顯示,模塊必須在文件中)。

任何幫助,將不勝感激。

+0

我讀http://stackoverflow.com/questions/712696/is-there-a-quick-starting-haskell-interpreter-suitable-for-scripting,但unhelped – amccausl

+1

你是否在以最靜態和安全強調語言之一的方式要求'eval'?多麼諷刺... – delnan

+1

不一定。構建純度和沙盒的語言似乎是動態編譯的絕佳語言。 – amccausl

回答

3

hintplugins是主要選項。 hint可讓您將函數解釋爲字節碼,plugins使用編譯的目標碼。

請注意,由於這些'eval'函數在運行之前必須進行類型檢查,因此它們很少是純粹的值,因爲評估可能會因類型錯誤而失敗。

+1

該提示使用任一種類型來編碼錯誤,所以它應該能夠是純的。 – amccausl

+0

[提示hackage](http://hackage.haskell.org/package/hint)。 –

+0

提示實際上重新加載了有問題的庫和模塊的全部內容。這需要IO。 – Carl

-1

抽象的答案是,你必須要做出(->)Read一個實例(也可能是Show,而你在它)

如何在地球上,你應該做的是,我不知道。解釋代碼是一件不小的任務。

如果你正在處理簡單的函數,我會建議創建一個代數數據類型來表示它們。

data Fun = Add | Subtract | Multiply deriving (Eq, Show, Read) 

runFun Add  = (+) 
runFun Subtract = (-) 
runFun Multiply = (*) 

*Main> runFun (read "Add") 2 3 
5 
*Main> runFun (read "Multiply") 2 3 
6 
*Main> runFun (read "Subtract") 2 3 
-1