Confusing parse error for missing do keyword
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"
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | low |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |