この方法でのイベントへの参加はうまくいかないようです。代わりにこれを試してください:
import FRP.Reactive
import FRP.Reactive.FieldTrip
import Graphics.FieldTrip
import Control.Monad
import Control.Applicative
flipflop = stepper "none" $ either (const "flip") (const "flop")
<$> eitherE (atTimes ((+2) <$> [0,5..])) (atTimes [5,10..])
txtGeom = ((uscale2 (0.5::Float) *%) . utext . show <$>)
main = anim2 (txtGeom . pure flipflop)
残念ながら、このバージョンにはまだスペース リークがありますが、はるかに小さくなっています。約 1 分間実行した後、RAM の合計使用量は約 9.7MB でした。
flipFlop
を作成する関数もありますBehavior Bool
。これはフリップフロップではうまくいきましたが、最初の 2 秒間は「なし」を追加するきれいな方法がわかりませんでした。
私もこれを試しました
flipflop = stepper "none" $ (const "flip" <$> (atTimes ((+2) <$> [0,5..])))
`mplus` (const "flop" <$> atTimes [5,10..])
最初のバージョンと同じように動作するようです。
もちろん、これはあなたが求めている方法で動的にスケジューリングすることにはあまり役に立ちません。残念ながら、このユースケースが Reactive で機能するとは思えません。
私は、Reactive で作成された作品を非常に高く評価しており、好きになりたいと思っていますが、理由を説明するのは非常に難しいようです。 メーリング リストのこのスレッドは、よくあると思われる問題 (および解決策!) の例です。また、「unamb」ライブラリ (Reactive の多くの基礎となるもの) は、GHC のスレッド化に多数の非常に微妙なバグを公開し、ghc-6.12 で修正されるまで、結果に大混乱をもたらしました。これは決して Conal や他の Reactive コントリビューターのせいではありませんが、特に以前の GHC では、フレームワークを使用するのが非常に難しくなりました。
他の FRP パッケージのいくつかを試すことができます。Yampa はしっかりとした実装があり、 Elereaは比較的簡単に手に入れることができ、素晴らしいデモ アプリケーションがあると聞いています。