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.

Share:
20,106
RCIX
Author by

RCIX

Lua is underrated!

Updated on July 09, 2022

Comments

  • RCIX
    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 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
    
  • hbobenicio
    hbobenicio almost 7 years
    Saved the day! Thanks!