haskell - 过滤reactive-banana中的重复事件

标签 haskell frp reactive-banana

假设我有

x :: Event t (A,B)

我可以获得它的第一个组件:

fst <$> x :: Event t A

但是,即使第一个组件没有更改,此事件也会触发。我想避免这种情况,因为它会触发昂贵的重新计算。

AEq 的实例,因此我希望能够删除第一个组件与其最后一个值相比没有更改的连续事件。

理想情况下,我想要一个函数

filterDups :: Eq a => Event t a -> Event t a

无需借助 Moment monad 即可实现此目的。是否可以?或者说最好的方法是什么?

最佳答案

您必须记住有关事件历史的信息才能做您想做的事情。正如其他答案已经提到的,您可以使用 AccumE 来实现此目的。 Here简洁的定义:

unique :: Eq a => Event t a -> Event t a
unique = filterJust . accumE Nothing
       . fmap (\a acc -> if Just a == acc then Nothing else Just a)

关于haskell - 过滤reactive-banana中的重复事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320169/

相关文章:

haskell 。 "Could not deduce (t ~ [t]) from the context (Eq t)"

haskell - 使数字函数成为 Num 的实例?

haskell - 反射:创建可重置的延迟事件

javascript - 如何使用 Bacon.js 返回 ajax 响应对象?

haskell - FRP中的“Behavior now”

haskell - FRP - 事件流和信号 - 仅使用信号会丢失什么?

haskell - Haskell 会出现哪些类型的运行时错误?

haskell - 如何报告 Haskell 代码中的错误

ios - 如何在信号链中发送错误

Haskell Reactive-Banana FRP 和事件循环