Consider the following code:
foo = do
let bar = do
baz
bar
It doesn't parse in ghc, version 8. It complains about the line containing baz. This code does parse, though:
foo = do
let bar = do
baz
bar
I find this confusing. What's the essential difference between the two versions?