如何获取'eval'函数返回的值?

时间:2014-05-09 16:11:50

标签: haskell eval

我是函数式编程的新手,我很难弄清楚如何在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))“而且此时它变得太复杂了。谢谢。

1 个答案:

答案 0 :(得分:3)

您应该阅读我对您链接的问题的评论:

  

显然你可以自己阅读haddock文档,但是很快,解释函数会给你一个多态类型的结果(不是字符串表示),根据你的需要可能会更好。快乐的黑客攻击。

换句话说,只需使用interpret功能:

Prelude Language.Haskell.Interpreter> runInterpreter $ setImports ["Prelude"] \
                    >> interpret "3+5" (undefined :: Int)
Right 8

那是什么(undefined :: Int)?它是一种类型见证,允许函数interpret推断结果类型。