Как получить нормальное значение из операции ввода-вывода в 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

и я хотел бы получить из него значение Chars, , а не действие ввода-вывода. У меня нет идей, как это сделать и возможно ли это вообще.

Chars — это просто контейнер с [Int]под названием curData и Intпод названием curIndex. Специфика не так важна, я просто хочу знать, есть ли способ для этой функции вернуть Charsвместо IO Chars.

Если нет, то как мне передать это в качестве аргумента функции, которая принимает Chars? Я новичок в Haskell IO, но я не думаю, что хочу, чтобы все мои функции, которые принимают Charsв качестве аргументов, вместо этого должны были принимать IO Charsв качестве аргументов, а затем извлекать и переупаковывать их. Это кажется ненужным.

Спасибо!

18
задан Matthias Braun 28 February 2019 в 13:24
поделиться