为什么这个不正确的缩进在haskell中?

时间:2016-08-27 17:46:37

标签: haskell

为什么第5行不包含缩进错误。我期望在编译时得到解析错误。我预计第5行的+必须在第4行的*下对齐。

module Learn where

x = 10
  * 5
 + y  -- why isn't this incorrect indentation

myResult = x * 5

y = 10

2 个答案:

答案 0 :(得分:4)

它汇编,因为那里没有可以考虑的阻止。

缩进仅在whereletdocase 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的右侧,每条线的开始并不重要。