假设我有
x :: Event t (A,B)
我可以获得它的第一个组件:
fst <$> x :: Event t A
但是,即使第一个组件没有更改,此事件也会触发。我想避免这种情况,因为它会触发昂贵的重新计算。
A
是 Eq
的实例,因此我希望能够删除第一个组件与其最后一个值相比没有更改的连续事件。
理想情况下,我想要一个函数
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/