gpt4 book ai didi

haskell - 在 Reactive Banana 中寻找 `flatten::Event [a] -> Event a`

转载 作者:行者123 更新时间:2023-12-02 13:17:38 26 4
gpt4 key购买 nike

我正在寻找类似 flatten::Event [a] -> Event a (将 []Foldable f => f 交换) code> 如果需要),这将为 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我上面的实现将不起作用,因为所有事件都可能在任何处理程序注册之前被触发。

最佳答案

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

但是 Event [a] 似乎是表示一组巧合事件的合理方式。为什么需要压平它?

关于haskell - 在 Reactive Banana 中寻找 `flatten::Event [a] -> Event a`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com