Ho la seguente funzione:Come ottenere il valore normale da azioni IO in 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
e sto volendo ottenere un Chars
fuori di esso, non un'azione IO. Ho no idea di come farlo, o se è anche possibile.
Chars è fondamentalmente solo un contenitore con un [Int]
chiamato curData e un Int
chiamato curIndex. Le specifiche non sono così importanti, voglio solo sapere se c'è un modo per questa funzione di restituire un Chars
invece di un IO Chars
.
In caso negativo, come si passa questo argomento come argomento a una funzione che accetta uno Chars
? Sono un po 'nuovo a Haskell IO, ma non credo di volere che tutte le mie funzioni richiedano Chars
come argomenti per prendere invece gli argomenti come IO Chars
e quindi estrarli e riconfezionarli. Sembra inutile.
Grazie!
non abbiamo forse una canonica "Come faccio ad avere un' a' di un iO a' '?"domanda per contrassegnare questo duplicato di ancora? –
Ci sono troppe risposte informative qui, e non abbastanza foto di gatti carini. Quindi lascerò questo qui: http://spl.smugmug.com/Humor/Lambdacats/ trapd-in-IO-monad-plz-help/960526421_MnNqB-S-1.jpg – rtperson