为什么第5行不包含缩进错误。我期望在编译时得到解析错误。我预计第5行的+
必须在第4行的*
下对齐。
module Learn where
x = 10
* 5
+ y -- why isn't this incorrect indentation
myResult = x * 5
y = 10
答案 0 :(得分:4)
它汇编,因为那里没有可以考虑的阻止。
缩进仅在where
,let
,do
,case of
之后才有意义。
这些关键字会引发一系列事情,了解一条线是继续上一个条目,开始新条目还是结束该区块非常重要。
case f 5 of
A -> foo
32 -- continues the previous entry
B -> 12 -- starts a new entry
+ bar 43 -- ends the case
在=
之后,我们不需要将块拆分为条目:只有一个表达式。因此,indentation rules不适用。
答案 1 :(得分:1)
这是因为x
的定义全部位于x
的开头右侧。只要这些行缩进到x
的右侧,每条线的开始并不重要。