malentendido de entrada simple en haskell
Frecuentes
Visto 78 veces
0
import System.IO
import Data.Char
edastaNr n
= do
putStrLn "Anna rida:"
line <- getLine
if null line
then return ()
else do return length(line)
¿Alguien puede explicar por qué la última línea es incorrecta y cómo es posible solucionarlo? No me doy cuenta.. el error es:
Couldn't match expected type `IO ()' with actual type `[a0] -> Int'
1 Respuestas
4
Le faltan paréntesis.
...
else do return (length line)
Sin embargo, también hay errores tipográficos. ¿Cuál es el tipo de su edasaNr
¿función? Debe hacer algo de IO y devolver un Int
, cuando se le da un argumento.
Entonces sería mejor escribirlo como:
edastaNr :: a -> IO Int
edastaNr n = do
putStrLn "Anna rida:"
line <- getLine
if null line
then return 0
else return $ length line
lo que también revela que no usas el n
argumento (por lo que puede tener cualquier tipo).
contestado el 22 de mayo de 12 a las 19:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas haskell syntax input or haz tu propia pregunta.
Además, desde
null line
implicalength line == 0
, esto significa que ni siquiera necesitas un condicional. - Daniel WagnerEl tipo
a -> IO Int
ya no implica que no use el argumento, al menos para algún significado de "uso"--foo n = seq n $ return 0
- Felipe JF