Orc*_*lev 7 haskell frp reactive-programming reactive-banana
在反应性香蕉中,我有一个产生一系列数字的事件流,其中一些数字连续重复几次(我不关心所有重复数据,只关注连续重复数据).如何修改该事件流以仅包含非连续重复项?
我尝试使用更改将其转换为行为,认为行为只会在事件是新数字时"更改",而是每次收到新的输入事件时行为都会触发更改事件.
请注意,该changes函数应仅用于绑定到GUI工具包等,它不应用于具有事件和行为的常规编程.
抑制重复事件发生的函数可以用mapAccum和filterJust组合符表示如下
skipEqual :: Eq a => Event t a -> Event t a
skipEqual = filterJust . fst . mapAccum Nothing . fmap f
where
f y (Just x) = if x == y then (Nothing,Just x) else (Just y,Just y)
f y Nothing = (Just y, Just y)
test = interpretModel skipEqual $ map (:[]) [1 :: Int,1,2,3,3,2]
Run Code Online (Sandbox Code Playgroud)
跑步test给
*Main> test
[[1],[],[2],[3],[],[2]]
Run Code Online (Sandbox Code Playgroud)
如预期的.
换句话说,你可以简单地想象 Event为出现的列表,然后运用你的心爱的"清单"组合程序这一点.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |