哈斯克尔计算器

时间:2013-02-25 05:10:20

标签: haskell

这是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

1 个答案:

答案 0 :(得分:3)

您的代码几乎没有问题

  • until未正确使用。当我不得不一次又一次地重复同样的动作时,我觉得更好。您可以编写until的monadic版本并使用它。
  • 最好在main内部使用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