如何打印两个数字之和的结果?

 main:: IO()
 main = do putStrLn "Insert the first value: "
        one <- getLine
        putStrLn "Insert the second value: "
        two <- getLine
        putStrLn "The result is:"
    print (one+two)

这给我一个错误:
  ERROR file:.\IO.hs:3 - Type error in application
  *** Expression     : putStrLn "The result is:" print (one + two)
  *** Term           : putStrLn
  *** Type           : String -> IO ()
  *** Does not match : a -> b -> c -> d

最佳答案

我将猜测您的错误与不使用parens有关。

另外,由于getLine生成字符串,因此您需要将其转换为正确的类型。我们可以使用read从中获取一个数字,尽管如果无法解析该字符串有可能会导致错误,因此您可能希望在读取之前检查它仅包含数字。

print (read one + read two)

根据优先级,可以将变量解析为print的参数,而不是+的参数。通过使用括号,我们确保变量与+关联,并且仅将结果作为print

最后,请确保缩进正确。您在此处粘贴的方式对于do-expression不正确。第一个putStrLn应该与其余的缩进级别相同-至少ghc对此有所抱怨。

10-07 15:14