W jaki sposób można wywoływać wiele połączeń z numerem SDL.pollEvent :: IO Event
, aż do uzyskania wyniku SDL.NoEvent
i zebrać wszystkie wyniki na liście?Zbieranie danych wyjściowych IO na listę
w kategoriach nadrzędnych coś takiego:
events = []
event = SDL.pollEvent
while (event != SDL.NoEvent) {
events.add(event)
event = SDL.pollEvent
}
Dlaczego "repeat()"? – Peaker
@peaker: 'repeat() :: ListT IO()' jest nieskończoną listą IO-monadyczną zawierającą wartości, które nie mają znaczenia ('()'). następnie '(>>)' to z 'lift pollEvent', tak aby dla każdego elementu nieskończonej listy' pollEvent'. 'takeWhile' czyni z niego skończoną listę monadyczną, a następnie' toList' czyni ją ':: IO [Event]'. – yairchu
To wydaje się nieco dziwne. Może bardziej sensowne byłoby użycie czegoś takiego jak "repeatM (lift pollEvent)"? – Peaker