
#8106: Confusing parse error for missing do keyword -------------------------------------+-------------------------- Reporter: mhitza | Owner: Type: bug | Status: new Priority: low | Milestone: Component: Compiler (Parser) | Version: 7.6.3 Keywords: | Operating System: Linux Architecture: x86_64 (amd64) | Type of failure: Other Difficulty: Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | -------------------------------------+-------------------------- {{{ import Control.Monad (when) main = do when (True == True) $ x <- getLine print "y" }}} This piece of code is missing the `do` keyword before the block, yet the error message that is returned is: {{{ poc.hs:4:11: Parse error in pattern: True == True }}} Yet the next variant provides a bit more helpful information {{{ import Control.Monad (when) main = do when (True == True) $ print "x" print "y" }}} {{{ poc.hs:5:9: Couldn't match expected type `(a0 -> IO ()) -> [Char] -> m0 ()' with actual type `IO ()' The function `print' is applied to three arguments, but its type `[Char] -> IO ()' has only one In the second argument of `($)', namely `print "x" print "y"' In a stmt of a 'do' block: when (True == True) $ print "x" print "y" }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8106 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler