2011-11-25 85 views
0

为什么下面的代码不正确?我得到这个错误:做{{}中的最后一个生成器必须是一个表达式?Haskell压痕错误

main = do putStrLn "What is 2 + 2?" 
      x <- readLn 
      if x == 4 
       then putStrLn "You're right!" 
       else putStrLn "You're wrong!" 
+0

这是疯了!当我复制我在我的问题中写入的代码并将其粘贴回来时,它的工作原理!但是完全一样! – osager

回答

9

您在混合制表符和空格:第二行和第五行包含制表符,而第三行和第四行不包含制表符。

Haskell编译器可能将选项卡扩展到与编辑器不同数量的空格,并且编辑器中看起来正确缩进的内容看起来会与编译器混淆。

最好避免混合制表符和空格,只使用其中的一个进行缩进。

2

您有制表符而不是空格。将代码粘贴到stackoverflow后,只有空格并且一切正常。

+0

谢谢大家,我明白了。 – osager