quiero leer un archivo entero en una cadena y luego usar la función lines
para obtener las líneas de la cadena. Estoy tratando de hacerlo con estas líneas de código:Haskell leer las líneas de archivo
main = do
args <- getArgs
content <- readFile (args !! 0)
linesOfFiles <- lines content
Pero yo estoy recibiendo el siguiente error al compilar anuncio se produce un error:
Couldn't match expected type `IO t0' with actual type `[String]'
In the return type of a call of `lines'
In a stmt of a 'do' block: linesOfFiles <- lines content
pensé uniendo el resultado de readFile
a contenido será String
DataType, ¿por qué no?
Además, comparar esto con el tipo de getArgs y readFile, para lo completo. –
¿Cómo funciona esta solución? No puede pasar 'content' a' lines' porque el tipo de 'lines' es' String -> [String] 'y el tipo de' content' es 'IO String' – imkendal
@kjh No,' content' es 'String'. El tipo de 'readFile (args !! 0)' es 'IO String', y vinculamos' content' al "resultado" de esa acción 'IO'. El constructo 'do {a <- acción; cosas; } 'desúbals en' action >> = \ a -> stuff', si 'action' tiene type' IO t', entonces 'a' tiene type' t'. –