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

3 ответа

Решение

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

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

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

Другие вопросы по тегам