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 ->
- он ожидает, что в конце будет выражение.
Неправильный отступ может привести к этой ошибке. Кроме того, хорошо не использовать вкладки, только пробелы.