我希望下一个将在一秒钟内打印“()” 10次。但一秒钟后挂起。为什么?
adaptE $ fmap print $ filterE (const True) $ atTimes [0.1, 0.2 ..]
我发现它与filterE中使用的liftM有关:
filterE :: (Ord t, Bounded t) => (a -> Bool) -> EventG t a -> EventG t a
filterE p m = justE (liftM f m)
where
f a | p a = Just a
| otherwise = Nothing
我尝试使用
filterE
重新实现fmap
,它似乎可以正常工作。为什么?如何设计标准
filterE
?我发现自己重新实现了
reactive
包提供的许多标准功能(例如diffE
,integrate
)。这是否意味着该程序包存在问题或我使用错误的方式?谢谢!
最佳答案
以我的经验,响应式(Reactive)是 buggy ,尤其是关于Monad
的Event
实例(monad join
操作有点太严格了,我们不确定为什么)。尽可能避免这种情况。响应式是一个实验,它代表了更多运行时支持所可能实现的目标。请参阅Yampa,以获取更稳定,可靠和有效的FRP库,即使它的表达能力较低。
关于haskell - FRP( react 性): How to use filterE?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4113207/