这是error: parse error on input '->'
的新主页
我评论了错误的位置。它可能是某处的缩进错误吗?
main :: IO()
main = do
expression <- evaluate_input
putStrLn $ show $ compute expression
evaluate_input :: IO ()
evaluate_input = do
args <- getArgs
case args of
a:s -> return a
-> do putStrLn "Enter Expression or 'end' to exit calculator"
hFlush stdout
getLine
unless (expression -> "end") $ showExpr expression --error here
where
showExpr expression = do putStrLn $ evaluateExpr expression
evaluate_input
evaluateExpr :: String -> String
evaluateExpr = show
答案 0 :(得分:3)
您的代码几乎没有问题
until
未正确使用。当我不得不一次又一次地重复同样的动作时,我觉得更好。您可以编写until
的monadic版本并使用它。getArgs
一次。你不需要每次都重复它。此处有更正版本。我还没有实现所有的功能,所以你仍然需要做解析和评估表达式的艰苦工作。
import Control.Monad (unless)
main :: IO ()
main = evaluate
evaluate :: IO ()
evaluate = do
putStrLn "Enter Expression"
expr <- getLine
unless (expr == "end") $ showExpr expr
where
showExpr expr = do putStrLn $ evaluateExpr expr
evaluate
evaluateExpr :: String -> String
evaluateExpr = show