tengo la siguiente función:¿Cómo conseguir el valor normal de la acción IO en Haskell
get :: Chars -> IO Chars
get cs = do
char <- getChar
let (dats, idx) = (curData cs, curIndex cs)
let (x,y:xs) = splitAt idx dats
let replacement = x ++ (ord char) : xs
return $ Chars replacement idx
y estoy deseando conseguir un Chars
fuera de él, no una acción IO. Tengo no idea de cómo hacer esto, o si es posible.
Chars es básicamente un contenedor con un [Int]
llamado curData y un Int
llamado curIndex. Los detalles no son tan importantes, solo quiero saber si hay una forma para que esta función devuelva un Chars
en lugar de un IO Chars
.
Si no, ¿cómo paso esto como argumento a una función que toma un Chars
? Soy algo nuevo para Haskell IO, pero no creo que quiera que todas mis funciones tomen Chars
como argumentos para tener que tomar IO Chars
como argumentos, y luego extraerlos y volver a empaquetarlos. Parece innecesario
Gracias!
¿no tenemos una canónica "¿Cómo consigo un' a '' fuera de un a' IO?"pregunta para marcar esto como un duplicado de? –
Aquí hay demasiadas respuestas informativas, y no hay suficientes fotos de gatos lindos. Así que lo dejaré aquí: http://spl.smugmug.com/Humor/Lambdacats/ trapd-in-IO-monad-plz-help/960526421_MnNqB-S-1.jpg – rtperson