2

我正在努力转换正确的字符串。我有一个名为 getEval 的方法,它计算一个数学表达式(基本上是一个字符串),我得到它如下:

*Main> getEval "3+6"
Right "9"

getEval 的类型是

*Main> :t getEval "3+6"
getEval "3+6"
:: (Functor m, Control.Monad.CatchIO.MonadCatchIO m) =>
   m (Either InterpreterError String)

getEval 看起来像这样:

getEval str = runInterpreter $ setImports ["Prelude"] >> eval str

如果重要,getEval 使用 Haskell 提示库 (Language.Haskell.Interpreter) 中的 eval 来进行实际的解析和计算。我怎样才能把它变成一个浮点数?

4

2 回答 2

2
getEval str = do
        Right res <-  Interpreter.runInterpreter (Interpreter.setImports
                ["Prelude"] >> Interpreter.interpret str (Interpreter.as ::
                Float))
        return res
于 2012-12-14T21:32:09.317 回答
-2
case getEval "3+6" of
  Right value  = read value :: Float
  Left  errstr = error ("Interpreter error" ++ errstr)

应该做你所期望的。readsPrec如果您担心Read解析错误,您可能也想看看。

于 2012-12-14T19:50:56.730 回答