7

私は自分自身にFRPとリアクティブバナナを教えながら、私をフォローしている人たちにとってより役立つチュートリアルになることを願っています。ここでチュートリアルの進捗状況を確認できます。

イベントを使用して単純なビーピーノイズの例を実装しようとすると、行き詰まります。私はこのようなことをする必要があることを知っています:

reactimate $ fmap (uncurry playNote) myEvent

私の中NetworkDescriptionで、しかし私はネットワークに同じことを繰り返し実行させる方法、または一度何かを実行させる方法を理解できません。理想的には、私はこのようなものを探しています:

once :: a -> Event t a
repeatWithDelay :: Event t a -> Time -> Event t a
concatWithDelay :: Event t a -> Event t a -> Time -> Event t a

上記のTimeタイプは、最終的に使用する時間の測定の代用にすぎません。「遅延」機能を駆動するための動作としてシステム時間を接続する必要がありますか?それは必要以上に複雑に思えます。

前もって感謝します、

エコーノーラン

編集:さて、repeatWithDelayとconcatWithDelayのタイプは意味がありません。これが私が実際に意味したことです。

repeatWithDelay :: a -> Time -> Event t a
concatWithDelay :: a -> a -> Time -> Event t a
4

1 に答える 1

4

時間が経つにつれて一貫性に関するさまざまな課題が発生するため、現時点ではそのような機能をコア モデルに含めないことにしました。たとえば、2 つのイベントが今から 5 秒後に発生するようにスケジュールされている場合、それらは同時に発生する必要がありますか? そうでない場合、どちらが最初に来るべきですか?コアモデルは正式な証明に適しているはずですが、これは実際の物理的な時間測定では機能しません。

とは言っても、私はそのような機能を「動作するが保証はない」という形で含める予定です。まだ行っていない主な理由は、時間の測定に標準的な選択肢がないことです。アプリケーションが異なればニーズも異なります。ナノ秒の分解能が必要な場合もあれば、GUI フレームワークからタイマーを使用したい場合もあれば、外部 MIDI クロックに同期したい場合もあります。言い換えれば、時間ベースの関数が多くのタイマー実装で一般的に機能することを望んでおり、これに適した API 設計を見つけたのは、reactive-banana-0.7.0 だけです。

もちろん、タイマーを使用して独自の時間ベースの関数を実装することは既に可能です。Wave.hsの例は、その方法を示しています。もう 1 つの例は、Henning Thielemann の react -balsa ライブラリです。これは、MIDI データをリアルタイムで処理するためにさまざまな時間ベースのコンビネータを実装しています。

于 2012-09-21T08:57:19.703 に答える