请考虑以下代码:
foo = do
let bar = do
baz
bar
它不会在ghc
版本8中进行解析。它会抱怨包含baz
的行。但是,这段代码确实解析了:
foo = do
let bar = do
baz
bar
我发现这令人困惑。两个版本之间的本质区别是什么?
答案 0 :(得分:4)
问题是缩进将baz
置于无人区。它不能缩进到足以成为let
表达式的一部分,但它缩进得太远而不能成为包含do
表达式的let
表达式的下一部分。 / p>