我正在寻找一种从字符串加载Haskell函数来运行的方法。我知道手前的类型,但不知道函数的内容。
理想情况下,解决方案很快,无需在IO中运行。
我一直在看提示(Language.Haskell.Interpreter),但它不适合账单(eval调用show,模块必须在文件中)。
任何帮助都将不胜感激。
答案 0 :(得分:3)
hint
和plugins
是主要选项。 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