我试图比较两个用户输入,但是似乎无法正常工作并不断出现解析错误。任何帮助将不胜感激。
main = do
foo <- putStrLn "Enter two numbers."
numone <- getLine
numtwo <- getLine
putStrLn $ ("You entered " ++ numone ++ " and " ++ numtwo)
if
numone == numtwo
then
putStrLn "They are the same"
else
putStrLn "They are not the same"
答案 0 :(得分:8)
错误可能是由于本地版本和此处发布的版本之间的缩进的微小变化引起的。 Haskell中的缩进非常重要,因为编译器使用它来了解某些“块”在哪里开始和结束。
此外,您可以删除foo <-
部分(嗯,这没错,但是很没用)。重新格式化后,我们得到:
main = do
putStrLn "Enter two numbers."
numone <- getLine
numtwo <- getLine
putStrLn $ ("You entered " ++ numone ++ " and " ++ numtwo)
if numone == numtwo
then
putStrLn "They are the same"
else
putStrLn "They are not the same"
此外,您现在比较两个字符串。您可以使用readLn :: Read a => IO a
将它们转换为Int
(或其他可读类型):
main = do
putStrLn "Enter two numbers."
numone <- readLn :: IO Int
numtwo <- readLn :: IO Int
putStrLn $ ("You entered " ++ show numone ++ " and " ++ show numtwo)
if numone == numtwo
then
putStrLn "They are the same"
else
putStrLn "They are not the same"
答案 1 :(得分:2)
您在代码段中混合使用制表符和空格,并且打印和if
表达式之间的空白行缩进的距离少于其他行。您的整个do-block必须具有相同的初始缩进。我建议仅使用空格(如果需要,也可以仅使用制表符),以免意外地出现看上去未正确对齐的未对齐代码。
我看到我是根据OP从未写过的代码回答的,因为其他人所做的编辑不正确。它“修复”了缩进,但实际上由于其他原因仍然是错误的。哦,那仍然是一个缩进问题,但与混合空格和制表符无关。