Мне там птичка нашептывала, что ио в хаскеле тоже чистый т.к. он инкапсулирует внутри себя всю "грязную" работу
Сам генератор обычно чистый и детерминистичный. Ты даёшь старый мир, а он из него делает рандомное значение и новый мир. Если старый мир опять сунуть в генератор, результат будет идентичный: такое же значение и такой же новый мир.
Чтобы не возиться с передачей мира его можно положить в среду где есть состояние. Тогда она залпом будет вываливать кучу рандома и финальный мир.
Изнутри это будет выглядеть как будто из ниоткуда вываливаются рандомные значения. Но если запускать каждый раз с одинаковым начальным миром, то внутри прогона всё будет повторятся идентичным образом.