8

changes関数の型はFrameworks t => Behavior t a -> Moment t (Event t (Future a))です。Futureは抽象的であり、それを使用する関数は 1 つだけです ( reactimate')。

ただし、次の関数は簡単に記述できます。

changes' :: Frameworks t => Behavior t a -> Moment t (Event t a)
changes' b = fmap (fmap const b <@>) (changes b)

通常の (非Future) イベントを取得します。

その機能に何か問題がありますか?そうでない場合、元のchanges関数の型がより制限されているのはなぜですか?

4

1 に答える 1

4

この関数は、記述changesした関数とは異なる値を返しますchanges'。要点は次のとおりです。

stepper(または)によって定義された動作を考えてみましょう。これは、時間t0accumBでたまたま変化します。現時点で、行動にはどのような価値がありますか? 答えは、変化の時間t > t0よりも厳密に大きいすべての時間で動作が新しい値を取り、時間t0ではまだ古い値を保持しているということです。つまり、この関数は、値が変更時の Behavior の古い値であるイベントを返します。対照的に、この関数は新しい ("将来の") 値を返します。recursionに関係するさまざまな理由により、新しい値は型にラップされるため、フェーズまでアクセスできません。changes'changesFuturereactimate'

編集: Tobias は説明のために絵を描きました:

于 2014-11-18T14:13:03.067 に答える