11

次は "()" が 1 秒間に 10 回出力されると思います。しかし、1秒後にハングします。なんで?

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) を再実装していることに気付きました。パッケージにバグがあるということですか、それとも間違った方法で使用しているということですか?

ありがとう!

4

1 に答える 1

3

私の経験では、特に のMonadインスタンスに関しては、リアクティブはバグが多いですEvent (モナドjoin操作は少し厳密すぎて、その理由は正確にはわかりません)。可能であればそれを避けてください。リアクティブは実験であり、より多くのランタイム サポートで何が可能になるかを表しています。Yampa を参照してください。Yampa は、表現力が少し劣りますが、より安定しており、信頼性が高く、よく使われている FRP ライブラリです。

于 2010-11-08T07:09:38.843 に答える