2010-01-06 9 views
15

Como 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 se muestra en varios ejemplos que he visto, y me sale un error.Haskell - "La última declaración en una construcción 'do' debe ser una expresión"

Código:

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

verifique su sangría. asegúrese de que todas las líneas en el bloque tengan la misma sangría. las pestañas y los espacios no son lo mismo – newacct

+2

Si está trabajando con idiomas sensibles a sangrías como Haskell y Python, asegúrese de que su editor tenga una sola configuración de pestañas. ': set et ts = 8 sw = 4 sta' más o menos en Vim. – ephemient

Respuesta

21

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í)

+0

¡Salvó el día! ¡Gracias! – hbobenicio

17

Su última línea no es algo así como someVar <- putStrLn "hello", por casualidad, ¿verdad? Obtendrá ese error si intenta hacer un enlace de variable en la última línea, porque es equivalente a putStrLn "Hello" >>= \someVar -> - espera que haya una expresión al final.

+0

No, solo un 'putStrLn' ... – RCIX

+0

me tomó un tiempo resolver esto ... Te saludo ... Señor! – 7kemZmani

7

muesca incorrecta puede dar lugar a este error . Además, es bueno no usar pestañas, solo espacios.

Cuestiones relacionadas