views:

1053

answers:

3

Like it says in the tile: what does The last statement in a 'do' construct must be an expression mean? I ended my do block with a putStrLn like it shows in several examples I've seen, and i get an error.

Code:

main = do
    args <- getArgs
    file <-readFile "TWL06.txt"
    putStrLn results

And i just realized why it's like that.... Thanks to my dumb editor, the first line had 4 spaces and the otehr two had a tab!

+5  A: 

Your last line isn't something like someVar <- putStrLn "hello", by any chance, is it? You'll get that error if you try to do a variable binding on the last line, because it's equivalent to putStrLn "Hello" >>= \someVar -> — it expects there to be an expression at the end.

Chuck
Nope, just a `putStrLn`...
RCIX
+7  A: 

Most of the time, it's because your code is mis-aligned and compiler assumes that your "do" block ended prematurely (or has extra code that dont really belong there)

ADEpt
+6  A: 

Incorrect indentation can lead to this error. Also, is good not to use tabs, only spaces.

Hai