如何打印两个数字之和的结果?
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对此有所抱怨。