我是函数式编程的新手,我很难弄清楚如何在Haskell中使用'eval'函数。我的问题与this question有关。我使用答案中包含的以下代码:
$ cabal install hint
...
$ ghci
> import Language.Haskell.Interpreter
> runInterpreter $ setImports ["Prelude"] >> eval "3 + 5"
Right "8"
工作正常,并在屏幕上显示结果。我的问题是我不知道如何将此值作为Int获取,例如将其存储在变量中。我想写一个函数,将String作为参数。这个字符串将是一个像“2 + 4-1”的算术表达式,我的函数应该返回结果5.我不想进入语法和东西,因为我想计算像“2 ^ 3 + sin”这样的表达式log(4))“而且此时它变得太复杂了。谢谢。
答案 0 :(得分:3)
您应该阅读我对您链接的问题的评论:
显然你可以自己阅读haddock文档,但是很快,解释函数会给你一个多态类型的结果(不是字符串表示),根据你的需要可能会更好。快乐的黑客攻击。
换句话说,只需使用interpret
功能:
Prelude Language.Haskell.Interpreter> runInterpreter $ setImports ["Prelude"] \
>> interpret "3+5" (undefined :: Int)
Right 8
那是什么(undefined :: Int)
?它是一种类型见证,允许函数interpret
推断结果类型。