randomIO (fMinInspect, fMaxInspect)
- это действие ввода-вывода, значение типа (Num a, Random a) => IO a
.(Для простоты мы будем предполагать, что a
теперь равно Int
.) Обратите внимание, что при каждом выполнении действия может генерироваться различное случайное значение;в этом разница между IO Int
, являющимся действием , которое генерирует случайное значение, и самим случайным значением.
Как только мы выполним это действие, мы можем создать список действий с помощью replicate 10 (randomRIO (fMinInspect, fMaxInspect))
;это будет иметь тип [IO Int]
, 10 копий действия ввода-вывода.
Функция sequence
может преобразовать ваш список действий ввода-вывода в действие ввода-вывода, которое выдает список значений (каждое значение создаетсясоответствующее действие), преобразуя значение типа [IO Int]
в значение типа IO [Int]
.
> fMinInspect = 1
> fMaxInspect = 12
> sequence (replicate 10 (randomRIO (fMinInspect, fMaxInspect)))
[1,6,6,1,7,5,8,4,7,7]
(Здесь, как обычно, GCHi выполняет действие ввода-вывода, которое было произведено sequence
и возвращает результат, полученный этим действием ввода-вывода.)