haskell - 为什么下面的布局在 Haskell 中能够正确解析?

标签 haskell

我正在测试我对 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) 规则。由于标记 inlet block 中此时不合法,因此在 in 之前插入 }结束它。

解析错误规则可能会令人困惑,但它也非常灵活;使用它你可以例如编写 Haskell 语句时几乎不使用任何显式 {}

关于haskell - 为什么下面的布局在 Haskell 中能够正确解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340844/

相关文章:

haskell - 列表中的元素对

haskell - 特征函数的类型别名

haskell - Generic 通过什么机制与 Aeson 的 ToJSON 类交互?

haskell - yesod 测试 - 缺少依赖 yesod-test

haskell - Haskell 实例的适用律证明

list - Haskell: `reverse` 或 right `cons` ,效率更高

haskell - TypeFamilies 或 GADT 突然破坏了有效代码

haskell - 为什么这个美元符号结构不起作用?

Haskell:为什么不允许中缀类型构造函数?

haskell - 单行模式匹配的语法是什么?