加载动态haskell模块

时间:2011-02-20 00:56:35

标签: reflection dynamic haskell

我正在寻找一种从字符串加载Haskell函数来运行的方法。我知道手前的类型,但不知道函数的内容。

理想情况下,解决方案很快,无需在IO中运行。

我一直在看提示(Language.Haskell.Interpreter),但它不适合账单(eval调用show,模块必须在文件中)。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

hintplugins是主要选项。 hint允许您将函数解释为字节码,plugins使用编译的目标代码。

请注意,由于这些'eval'函数在运行之前必须进行类型检查,因此它们很少是纯值,因为评估可能会因类型错误而失败。

答案 1 :(得分:-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