我正在努力转换一个正确的字符串。我有一个名为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来进行实际的解析和计算。 我怎么能把它变成浮子?
答案 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
。