7

ある入力データ型から出力データ型へのストリームトランスフォーマーを作成しています。入力はユーザーが行うため、イベント間には時間がかかります。各入力にはある程度のリソースの読み込みが必要なため、「将来を見据えて」、つまり、すべての可能な入力をメインの計算に送信し、結果に基づいてリソースをプリロードしたいと思います。

現在、各入力の後に常に1つの出力がありますが、これを変更することは最終的に興味深いものになる可能性があります。

私はRossPatersonによるAutomatonトランスフォーマーでそれを実装することに成功しました。私のソリューションが最適かどうかはわかりません。

  • これを行う方法の良い例はありますか?おそらくテストコードでも?
  • モナドでも達成できますか?(例?、なぜそれが不可能なのか説明?)

編集:より詳細な情報を求めた後、ここにコードを追加しました。今、私はそれを削除し(それは理解できませんでした)、他の説明を追加します。私の質問は答えられます。

私の意図は、矢印/ストリームトランスフォーマーなどに入力された各ユーザー入力の後にメインイベントループを停止させることでした。次に、現在のオートマトンの状態を保存し、考えられるすべての入力(偽のイベント)を1つずつオートマトンに送信し、それらをキャッシュするためにロードする必要のあるリソースを確認します。次の実際のイベントの後、応答性を高めるためにキャッシュを使用します。主な計算はこれに影響されるべきではありません。

4

1 に答える 1

8

あなたが言及したすべてのユースケースは、Netwireライブラリでカバーされています。これは、Ross のオートマトンの矢印をワイヤー矢印のファミリーに一般化したものです。私はまだwiki ページを完成させていませんが、始めるには十分でしょう。

Kleisli (LogicT m)これをいくつかのモナドと組み合わせると、m非決定論的なワイヤが得られます。

追加の注意として、あなたが望むのはモナドではありません。

于 2011-12-07T17:38:49.387 に答える