Haskell - “A última declaração em uma construção 'do' deve ser uma expressão”
Pergunta
Como diz no título: o que faz The last statement in a 'do' construct must be an expression
significa? Eu terminei meu do
Bloqueie com um putStrLn
Como mostra em vários exemplos que vi, e recebo um erro.
Código:
main = do args <- getArgs
file <-readFile "TWL06.txt"
putStrLn results
Solução
Na maioria das vezes, é porque seu código está mal alinhado e o compilador assume que seu bloco "do" do "terminou prematuramente (ou tem código extra que realmente não pertence a lá)
Outras dicas
Sua última linha não é algo como someVar <- putStrLn "hello"
, por acaso, é? Você receberá esse erro se tentar fazer uma variável vinculativa na última linha, porque é equivalente a putStrLn "Hello" >>= \someVar ->
- espera que haja uma expressão no final.
O recuo incorreto pode levar a esse erro. Além disso, é bom não usar guias, apenas espaços.