我正在寻找类似flatten :: Event [a] -> Event a的东西(如果您愿意,可以与Foldable f => f交换[] ),它将为Event列表中的每个a生成一个单独的事件,比如sodium。
我怀疑这在switchE中是可能的,但是我需要一个[a] -> Event a类型的函数。
我可以用newEvent自己设计,但是有内置到reactive-banana的函数吗?
编辑
实际上,我不太确定我是否能用newEvent实现这一点。
flatten :: Foldable f => f a -> Banana.MomentIO (Banana.Event a)
flatten xs = do
(event, fire) <- Banana.newEvent
liftIO $ forkIO $ mapM_ fire xs
return event fire会一直阻塞直到有订阅者,或者如果没有订阅服务器,它会立即返回吗?
编辑2
查看newAddHandler,我上面的实现将无法工作,因为所有事件都可能在任何处理程序注册之前触发。
发布于 2016-04-29 17:51:28
这似乎是不可能的。根据the notes in Heinrich Apfelmus's blog的说法,Event不支持同时发生。这是一个相对较新的变化;这篇文章的日期是去年8月,版本1.0是在10月份发布的。当我几年前开始学习反应性香蕉时,情况肯定不是这样的。
但是Event [a]似乎是一种合理的方式来表示一组巧合事件。你为什么要把它压平?
https://stackoverflow.com/questions/36943608
复制相似问题