Actualmente estoy trabajando en un proyecto con Haskell, y me he encontrado con algunos problemas. Se supone que debo leer e insertar en una lista cada línea en un archivo "dictionary.txt", pero parece que no puedo hacerlo. Tengo este código:Haskell: insertando cada línea de un archivo en una lista
main = do
let list = []
loadNums "dictionary.txt" list
loadNums location list = do
inh <- openFile location ReadMode
mainloop inh list
hClose inh
mainloop inh list = do
ineof <- hIsEOF inh
if ineof
then return()
else do
inpStr <- hGetLine inh
inpStr:list
mainloop inh list
Se supone que debe llegar cada línea (sé que se pone cada línea, ya que la sustitución de la "inpStr: lista" con un "putStrLn inpStr" funciona correctamente, mostrando todas las líneas), y la inserta en una lista, pero me sale el siguiente error:
Couldn't match expected type `IO' against inferred type `[]'
Probablemente porque el hGetLine no es una cadena, sino un IO String, que no tengo idea de cómo manejar con el fin de obtener una cadena adecuada que puedo insertar en mi lista. No tengo idea de cómo se podría resolver esto, o cuál es exactamente el problema, pero si alguien tiene alguna idea de cómo incluir correctamente cada línea en un archivo en una lista, lo agradecería.
¡Gracias de antemano!
Al explicarle cosas a alguien que parece estar aprendiendo Haskell, evitaría usar (o incluso mostrar) el estilo sin sentido. No quiero asustarlos ;-) – CesarB
+1 por mencionar 'readFile'. Es muy útil salir de la mentalidad imperativa de abrir archivo/leer línea/detectar EOF/archivo cerrado, y dejar que las funciones como 'readFile',' getContents' y 'interaction' manejen el problema por ti. – Nefrubyr
¿Qué significa "mapM_"? Sé que "mapM" asigna una función a la mónada ... ¿pero la que tiene el guión bajo? – drozzy