如何SDL.pollEvent :: IO Event在输出结束之前发出多个调用SDL.NoEvent并将所有结果收集到列表中?
在命令性的术语中,这样的事情:
events = []
event = SDL.pollEvent
while ( event != SDL.NoEvent ) {
events.add( event )
event = SDL.pollEvent
}
Run Code Online (Sandbox Code Playgroud)
James Cook 非常友善地用这个函数扩展了monad-loop :
unfoldWhileM :: Monad m => (a -> Bool) -> m a -> m [a]
Run Code Online (Sandbox Code Playgroud)
与 SDL 一起使用:
events <- unfoldWhileM (/= SDL.NoEvent) SDL.pollEvent
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |