Ответ 1
В большинстве случаев это потому, что ваш код неверно выровнен, а компилятор предполагает, что ваш блок "делать" заканчивается преждевременно (или имеет дополнительный код, который на самом деле не существует)
Как говорится в заголовке: Что означает The last statement in a 'do' construct must be an expression
? Я закончил свой блок do
с помощью putStrLn
, как это показано в нескольких примерах, которые я видел, и я получаю сообщение об ошибке.
код:
main = do args <- getArgs
file <-readFile "TWL06.txt"
putStrLn results
В большинстве случаев это потому, что ваш код неверно выровнен, а компилятор предполагает, что ваш блок "делать" заканчивается преждевременно (или имеет дополнительный код, который на самом деле не существует)
Ваша последняя строка не похожа на someVar <- putStrLn "hello"
, случайно? Вы получите эту ошибку, если попытаетесь выполнить привязку переменной в последней строке, поскольку она эквивалентна putStrLn "Hello" >>= \someVar ->
- она ожидает, что в конце будет выражение.
Неправильное отступы могут привести к этой ошибке. Кроме того, хорошо не использовать вкладки, только пробелы.