为什么在Haskell中正确解析了以下布局?

时间:2014-08-16 13:56:31

标签: haskell

我正在测试我对Haskell报告中的布局解析函数的理解(Here

我能理解:

  • 测试用例1由于良好的对齐而通过
  • 测试用例2将失败,因为“在a + b中”被视为模块级别的新项目

但是,我无法理解为什么测试用例3会被正确解析。所以,问题:

为什么测试用例3会被正确解析? 解析函数L的LHS中的哪个模式(参见Here)测试用例3是否匹配?

-- test case 1
f_1 = let a = 1
          b = 2
      in a + b

-- test case 2
f_2 = let a = 1
          b = 2
in a + b

-- test case 3
f_3 = let a = 1
          b = 2
                     in a + b

1 个答案:

答案 0 :(得分:2)

测试用例3与解析错误(t)规则匹配。由于in块中的令牌let不合法,因此会在}之前插入in以结束它。

解析错误规则可能令人困惑,但它也非常灵活;使用它你可以例如写Haskell单行,很少有任何明确的{}