Haskell - "Последнее утверждение в конструкции" do "должно быть выражением"

Как говорится в заголовке: Что означает The last statement in a 'do' construct must be an expression? Я закончил свой блок do с помощью putStrLn, как это показано в нескольких примерах, которые я видел, и я получаю сообщение об ошибке.

код:

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

Ответы

Ответ 1

В большинстве случаев это потому, что ваш код неверно выровнен, а компилятор предполагает, что ваш блок "делать" заканчивается преждевременно (или имеет дополнительный код, который на самом деле не существует)

Ответ 2

Ваша последняя строка не похожа на someVar <- putStrLn "hello", случайно? Вы получите эту ошибку, если попытаетесь выполнить привязку переменной в последней строке, поскольку она эквивалентна putStrLn "Hello" >>= \someVar -> - она ​​ожидает, что в конце будет выражение.

Ответ 3

Неправильное отступы могут привести к этой ошибке. Кроме того, хорошо не использовать вкладки, только пробелы.