Haskell -- "The last statement in a 'do' construct must be an expression"
20,106
Solution 1
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)
Solution 2
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.
Solution 3
Incorrect indentation can lead to this error. Also, is good not to use tabs, only spaces.
Comments
-
RCIX almost 2 years
Like it says in the title: What does
The last statement in a 'do' construct must be an expression
mean? I ended mydo
block with aputStrLn
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
-
hbobenicio almost 7 yearsSaved the day! Thanks!