【发布时间】:2016-04-29 16:46:24
【问题描述】:
我正在寻找类似flatten :: Event [a] -> Event a 的东西(如果需要,可以将[] 与Foldable f => f 交换),这将为Event 列表中的每个a 生成一个单独的事件,例如split in an old version of 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:
查看implementation of newAddHandler 我上面的实现不起作用,因为所有事件都可能在任何处理程序注册之前被触发。
【问题讨论】: