Как я могу выдать несколько звонков на номер SDL.pollEvent :: IO Event
до выхода SDL.NoEvent
и собрать все результаты в список?Сбор выходов IO в список
В императивных условиях что-то вроде этого:
events = []
event = SDL.pollEvent
while (event != SDL.NoEvent) {
events.add(event)
event = SDL.pollEvent
}
Почему "повторить()"? – Peaker
@peaker: 'repeat() :: ListT IO()' - бесконечный IO-монадический список, содержащий значения, которые не имеют значения ('()'). то мы '(>>)' it с 'lift pollEvent', так что для каждого элемента бесконечного списка мы' pollEvent'. 'takeWhile' делает его конечным монадическим списком, а затем' toList' делает его ':: IO [Event]'. – yairchu
Это кажется немного странным. Может быть, имеет смысл использовать что-то вроде «repeatM (lift pollEvent)»? – Peaker