Haskell - «Последнее утверждение в конструкции do должно быть выражением» - PullRequest
15 голосов
/ 07 января 2010

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

Код:

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

Ответы [ 3 ]

23 голосов
/ 07 января 2010

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

17 голосов
/ 07 января 2010

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

7 голосов
/ 07 января 2010

Неправильный отступ может привести к этой ошибке. Также хорошо не использовать табуляции, только пробелы.

...