将右字符串转换为浮点数

时间:2012-12-14 19:36:16

标签: haskell

我正在努力转换一个正确的字符串。我有一个名为getEval的方法来计算数学表达式(基本上是一个String),然后按如下方式返回:

*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来进行实际的解析和计算。 我怎么能把它变成浮子?

2 个答案:

答案 0 :(得分:2)

getEval str = do
        Right res <-  Interpreter.runInterpreter (Interpreter.setImports
                ["Prelude"] >> Interpreter.interpret str (Interpreter.as ::
                Float))
        return res

答案 1 :(得分:-2)

case getEval "3+6" of
  Right value  = read value :: Float
  Left  errstr = error ("Interpreter error" ++ errstr)

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

相关问题