Я разрабатываю Haskell, и мне пришлось использовать System.Random.
Теперь у меня есть IO [Int], и я хотел бы проанализировать его, чтобы получить Int внутри, а затем выполнить действие со списком.
Я сделал :
function :: IO [Int] -> [a] -> a
function (x:xs) list = (list !! x)
Но я получаю сообщение об ошибке (x: xs) «Не удалось сопоставить ожидаемый тип 'IO [Int]' с фактическим типом '[a0]'.
Как мне разобрать IO [Int], чтобы использовать Int внутри?
см. stackoverflow.com/q/36729022/67579
@WillemVanOnsem, значит, я не могу использовать это значение? Но тогда я не понимаю, как вы можете использовать random в Haskell вне основного для печати. Я не могу рассчитывать со случайным образом, так как он возвращает только IO Int?
@Hrothgor Вы не можете развернуть вещь IO
, чтобы передать ее чистому потребителю. Но вы можете обернуть чистого потребителя, чтобы он принимал вещи IO
(и возвращал вещи IO
), с помощью fmap
или (>>=)
, в зависимости от того, возвращает функция объект IO
или нет.
Вы не можете распаковать значение из
IO
.