Haskell - “La última declaración en una construcción de 'hacer' debe ser una expresión”
Pregunta
Como se dice en el título: ¿Qué significa The last statement in a 'do' construct must be an expression
? Terminé mi bloque do
con un putStrLn
como lo demuestra en varios ejemplos que he visto, y me da un error.
Código:
main = do args <- getArgs
file <-readFile "TWL06.txt"
putStrLn results
Solución
La mayoría de las veces, es porque su código es mal alineados y el compilador asume que su bloque "hacer" finalizó antes de tiempo (o tiene código adicional que importa realmente pertenece allí)
Otros consejos
Su última línea no es algo así como someVar <- putStrLn "hello"
, por casualidad, ¿verdad? Usted obtendrá ese error si se intenta hacer una variable vinculante en la última línea, porque es equivalente a putStrLn "Hello" >>= \someVar ->
-. Se espera que haya una expresión al final
muesca incorrecta puede dar lugar a este error. Además, es bueno no utilizar pestañas, sólo espacios.