Haskell错误:输入`='时解析错误

mca*_*dre 7 syntax haskell indentation ghc ghci

眼镜

GHC 6.12.1

Mac OS X 10.6.4 x64

MacBook Pro

问题

我在使用let语法时遇到了麻烦.以下代码拒绝编译:

module Main where

main = let x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
Run Code Online (Sandbox Code Playgroud)

我尝试了进入y = 2,z = 3甚至更多.没有骰子.

(不受欢迎的)解决方案

我获得编译代码的唯一方法是

  1. 用空格替换硬标签.
  2. let子句替换该where子句.

mca*_*dre 16

#haskell上的Saizan解释说let表达式中的赋值必须对齐,而不是让它自己.只要分配排队,就可以使用硬标签或软标签.

正确的代码:

module Main where

main = let
        x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
Run Code Online (Sandbox Code Playgroud)


Nei*_*ett 11

您无法使用选项卡正确控制缩进,因为选项卡的大小未定义.

因此,不要在Haskell中使用制表符.他们是邪恶的.

  • 或者,对于需要具有不同缩进级别的内容,请使用新行.例如,将`let`放在一行,将`x = 1'放在下一行.然后选项卡没问题. (3认同)