我正在寻找flatten :: Event [a] -> Event a
之类的内容(如果需要,可以与[]
交换Foldable f => f
),这会为{{1}中的每个a
生成单独的事件列表,如split
in an old version of sodium
。
我怀疑Event
可能会出现这种情况,但我需要一个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
会阻止,或者如果没有订阅者,它会立即返回吗?
编辑2 :
查看上面的implementation of newAddHandler
我的实现是行不通的,因为在任何处理程序都可以注册之前,所有事件都可能被触发。
答案 0 :(得分:6)
这似乎是不可能的。根据{{3}},Event
并不支持同时发生。这是一个相对较新的变化;该帖子的日期是去年8月,v1.0于10月发布。几年前,当我最初学习Reactive Banana时,情况肯定不是这样。
但Event [a]
似乎是一种合理的方式来代表一组巧合事件。你为什么要把它弄平?