
Hello, all There is an error message that I get from GHCI that I do not understand. Usually it is caused by a syntax error or an indentation error, but I have occasionally seen it in other contexts and I'd like to understand what it is trying to tell me. [...] The message is that the last statement in a do construct must be an expression (exact text below). [...]
If you have a quick glance at the Haskell report (http://www.haskell.org/onlinereport/exps.html section 3.14), you'll see that do syntax is defined as follows: do {e} = e do {e;stmts} = e >> do {stmts} do {p <- e; stmts} = e >>= \ p -> do {stmts} (I dropped the error reporting part of the last rule for clarity). Try applying these rules to one of the programs that produces the error main = do{ line <- getLine } and you'll get: main = getLine >>= \ line -> do{} Now try to eliminate the final do{} and you'll find that there's no translation - hence the error message. -- Alastair Reid alastair@reid-consulting-uk.ltd.uk Reid Consulting (UK) Limited http://www.reid-consulting-uk.ltd.uk/alastair/