本文介绍了将IO输出收集到列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何向,直到输出为 SDL.NoEvent
并将所有结果收集到列表中?
在命令式中,像这样:
<$ p $(事件!= SDL.NoEvent){
events.add(事件)
事件= [code>事件= []
事件= SDL.pollEvent
事件= SDL.pollEvent
}
解决方案
James库克非常友善,可以扩展 s带有这个函数:
unfoldWhileM :: Monad m => (a - > Bool) - > m a - > m [a]
与SDL一起使用:
events< - unfoldWhileM(/ = SDL.NoEvent)SDL.pollEvent
How can I issue multiple calls to SDL.pollEvent :: IO Event
until the output is SDL.NoEvent
and collect all the results into a list?
In imperative terms something like this:
events = []
event = SDL.pollEvent
while ( event != SDL.NoEvent ) {
events.add( event )
event = SDL.pollEvent
}
解决方案
James Cook was so kind to extend monad-loops with this function:
unfoldWhileM :: Monad m => (a -> Bool) -> m a -> m [a]
used with SDL:
events <- unfoldWhileM (/= SDL.NoEvent) SDL.pollEvent
这篇关于将IO输出收集到列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!