起動時に2つのことを実行したいイベントトリガーがあるとします。まず、いくつかの動作の値を更新する必要があります。次に、他の条件が満たされた場合、動作の更新された値で別のイベントsend_offを発生させたいと思います。コード形式で表現され、私が持っていると仮定します
trigger :: Event b
trigger = ...
updateFromTrigger :: b -> (a -> a)
updateFromTrigger = ...
conditionFromTrigger :: b -> Bool
conditionFromTrigger = ...
behavior :: Behavior a
behavior = accumB initial_value (updateFromTrigger <$> trigger)
send_off :: Event a
send_off = ?????? (filterE conditionFromTrigger trigger)
次に、質問は次のとおりです。??????に何を入れますか これにより、send_offは動作の最新の値を送信します。これは、適用されたばかりのトリガーからの更新を含む値を意味します。
残念ながら、私が正しく理解していれば、Behaviorのセマンティクスは、更新された値がすぐに利用できないようなものです。したがって、ここでの唯一のオプションは、基本的に、作業を複製し、Behaviorの更新された値を再計算して、すぐに使用できるようにすることです。別のイベントでは、つまり?????? のようなもので
send_off =
flip updateFromTrigger
<$>
behavior
<@>
filterE conditionFromTrigger trigger
これで、ビヘイビアの代わりにディスクリートを使用することで、ビヘイビアの更新された情報をすぐに利用できるようになるという感覚がありますが、これは実際には、元のイベントと同時に発生するイベントを提供することと同じです。更新された値を使用し、リアクティブなものを見逃していない限り、バナナは、他の2つのイベントが同時に発生した場合にのみイベントを発生させる方法を提供しません。つまり、イベントの結合を提供しますが、交差点は提供しません。
だから私は2つの質問があります。まず、この状況についての私の理解は正しいですか、特に上記の私の解決策がそれを回避する唯一の方法であるという結論で正しいですか?第二に、純粋に好奇心から、イベントの交差点に対処する方法について開発者による考えや計画はありましたか?