SPOJ在Haskell中的"生命,宇宙和一切" - "if"解析错误

Unk*_*ser 1 io haskell if-statement parse-error

我是Haskell的初学者,想要开始解决它的问题,所以我试图解决第一个SPOJ问题(问题代码:TEST)."问题"是读取行并打印它们直到"42"出现.

main = do input <- getLine
          if input == "42" then putStr "" 
          else do putStrLn input
                  main
Run Code Online (Sandbox Code Playgroud)

我的解决方案非常简单,但输入'if'时出现解析错误.当我在开头和else语句中将'main'更改为'main2'时,一切正常.为什么'if'上有解析错误?

Zet*_*eta 8

编辑器混合了制表符和空格,当编辑器将选项卡显示为4个空格时,Haskell将制表符解释为8个字符.

请注意,您无法在普通代码块中的StackOverflow上重现您的代码,因为StackOverflow会自动用空格替换制表符.尝试自己 - 将问题中的代码复制到编辑器中,假设它不会自动将开头的空格转换为制表符.

因此,在编辑器中禁用选项卡并将现有选项卡转换为四个空格,您应该没问题.