我正在测试我对 Haskell 报告中的布局解析函数的理解 ( Here )
我可以理解:
- 由于对齐良好,测试用例 1 将通过
- 测试用例 2 将失败,因为“in 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
最佳答案
测试用例 3 匹配 parse-error(t) 规则。由于标记 in
在 let
block 中此时不合法,因此在 in
之前插入 }
结束它。
解析错误规则可能会令人困惑,但它也非常灵活;使用它你可以例如编写 Haskell 语句时几乎不使用任何显式 {}
。
关于haskell - 为什么下面的布局在 Haskell 中能够正确解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340844/