意味的に、あなたは持っています
Behavior a = Time -> a
つまり、aBehavior a
は時間とともに変化する型の値ですa
。一般に、がいつ変更されるかについてはまったくわからないBehavior a
ため、ボタンをクリックしてテキスト フィールドを更新するのは、かなり不適切な選択であることがわかります。とはいえ、カウンター例の数値の現在の値を表す動作を取得するのは簡単です。stepper
イベント ストリームで使用するか、accumB
代わりにaccumE
.
通常、入力と出力に接続するものは常にEvent
s になるため、Behavior
内部で中間結果に使用されます。
与えられた例で、単純な電卓のメモリ機能のように、現在の値を記憶する新しいボタンを追加するとします。メモリ ボタンと、記憶された値のテキスト フィールドを追加することから始めます。
bmem <- button f [text := "Remember"]
memory <- staticText f []
いつでも現在の値を要求できるようにする必要があるため、ネットワークでは、それを表す動作を追加します。
let currentVal = stepper 0 counter
次に、イベントを接続しapply
、Remember ボタンが押されるたびにビヘイビアーの値を読み取り、その値のシーケンスでイベントを生成するために使用できます。
emem <- event0 bmem command
let memoryE = apply (const <$> currentVal) emem
最後に、この新しいイベントを出力に接続します
sink memory [text :== ("", show <$> memoryE)]
メモリを内部的に使用したい場合はBehavior
、現在の値の も必要になりますが、これは出力に接続するためだけに使用するため、現時点ではイベントのみが必要です。
それは役に立ちますか?