11

我希望下一个将在一秒钟内打印 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

我尝试重新实现filterEusingfmap并且它似乎有效。为什么?该标准filterE是如何设计使用的?

我发现自己重新实现了reactive包提供的许多标准功能(例如diffEintegrate)。这是否意味着该软件包有问题或我以错误的方式使用它?

谢谢!

4

1 回答 1

3

以我的经验,响应式是错误的,尤其是对于 (monad操作有点过于严格,我们不确定为什么)的Monad实例。尽可能避免这种情况。Reactive 是一个实验,它代表了更多运行时支持的可能性。请参阅 Yampa 以获得更稳定、可靠和广泛使用的 FRP 库,即使它的表现力稍差。Eventjoin

于 2010-11-08T07:09:38.843 回答