为什么在表示法中这是一个解析错误?

时间:2017-02-06 18:07:47

标签: haskell syntax parse-error let do-notation

请考虑以下代码:

foo = do
  let bar = do
    baz
  bar

它不会在ghc版本8中进行解析。它会抱怨包含baz的行。但是,这段代码确实解析了:

foo = do
  let bar = do
      baz
  bar

我发现这令人困惑。两个版本之间的本质区别是什么?

1 个答案:

答案 0 :(得分:4)

问题是缩进将baz置于无人区。它不能缩进到足以成为let表达式的一部分,但它缩进得太远而不能成为包含do表达式的let表达式的下一部分。 / p>