寻找`flatten :: Event [a] - >事件a`在活跃香蕉

时间:2016-04-29 16:46:24

标签: haskell reactive-banana

我正在寻找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我的实现是行不通的,因为在任何处理程序都可以注册之前,所有事件都可能被触发。

1 个答案:

答案 0 :(得分:6)

这似乎是不可能的。根据{{​​3}},Event并不支持同时发生。这是一个相对较新的变化;该帖子的日期是去年8月,v1.0于10月发布。几年前,当我最初学习Reactive Banana时,情况肯定不是这样。

Event [a]似乎是一种合理的方式来代表一组巧合事件。你为什么要把它弄平?