Here’s a simple Haskell program with a silly error. The bar = 3
line is indented one space too few.
= do
main let foo = 1
= 3
bar
print (foo + bar)
Under GHC 8.4 I get the helpful error message
bad-block-args.hs:3:6: error: parse error on input ‘bar’
|
3 | bar = 3
| ^^^
but under GHC 8.6 I get the completely baffling and useless error message
bad-block-args.hs:1:8: error:
Unexpected do block in function application:
do let foo = 1
You could write it with parentheses
Or perhaps you meant to enable BlockArguments?
|
1 | main = do
| ^^...
No, I didn’t mean to enable BlockArguments
. I was not a supporter
of the BlockArguments
extension in the first place, and now it is
providing me with negative value when I’m not even trying to use it.
I have had
this occur to me a few times in the wild, always in an unwieldy do
block that is difficult to understand even when GHC isn’t complaining
about a syntax error. I would like GHC’s help here not a reference
to an unrelated small syntax
extension.
Under GHC 8.10 I get an error message in the correct place, but also
the unhelpful and misleading error about enabling BlockArguments
.
Ah well, that’s better than nothing.
badd.hs:1:8: error:
Unexpected do block in function application:
do let foo = 1
You could write it with parentheses
Or perhaps you meant to enable BlockArguments?
|
1 | main = do
| ^^...
badd.hs:3:10: error:
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
|
3 | bar = 3
| ^