Lexer: Suggest adding 'let' on unexpected '=' token
authorBen Gamari <bgamari.foss@gmail.com>
Tue, 16 Jun 2015 18:01:22 +0000 (20:01 +0200)
committerBen Gamari <ben@smart-cactus.org>
Tue, 16 Jun 2015 18:01:22 +0000 (20:01 +0200)
Summary:
I've heard numerous fledgling Haskeller's complain about the behavior of
ghci regarding bindings. While most REPLs accept bindings of the form
`x = 42`, GHCi is implicitly a `do` block, meaning that the user must
know to use a `let` to introduce a binding.

Here we suggest to the user that they may need a `let` and give them a
small example in the event that we find an unexpected `=` token.

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, bgamari

Differential Revision: https://phabricator.haskell.org/D980

compiler/parser/Lexer.x
testsuite/tests/ghci/should_run/T9915.stderr
testsuite/tests/parser/should_fail/readFail011.stderr
testsuite/tests/parser/should_fail/readFail034.stderr

index 1be7245..5839a41 100644 (file)
@@ -2229,6 +2229,9 @@ srcParseErr dflags buf len
                         (text "Perhaps you intended to use TemplateHaskell")
               $$ ppWhen (token == "<-")
                         (text "Perhaps this statement should be within a 'do' block?")
+              $$ ppWhen (token == "=")
+                        (text "Perhaps you need a 'let' in a 'do' block?"
+                         $$ text "e.g. 'let x = 5' instead of 'x = 5'")
   where token = lexemeToString (offsetBytes (-len) buf) len
         th_enabled = xopt Opt_TemplateHaskell dflags
 
index de2c5cb..333f17a 100644 (file)
@@ -1,2 +1,5 @@
 
-<interactive>:3:9: parse error on input ‘=’
+<interactive>:3:9: error:
+    parse error on input ‘=’
+    Perhaps you need a 'let' in a 'do' block?
+    e.g. 'let x = 5' instead of 'x = 5'
index 5c5504b..25accd2 100644 (file)
@@ -1,2 +1,5 @@
 
-readFail011.hs:7:10: parse error on input ‘=’
+readFail011.hs:7:10: error:
+    parse error on input ‘=’
+    Perhaps you need a 'let' in a 'do' block?
+    e.g. 'let x = 5' instead of 'x = 5'
index 027d0ca..75156c9 100644 (file)
@@ -1,2 +1,5 @@
 
-readFail034.hs:4:6: parse error on input ‘=’
+readFail034.hs:4:6: error:
+    parse error on input ‘=’
+    Perhaps you need a 'let' in a 'do' block?
+    e.g. 'let x = 5' instead of 'x = 5'