2016-06-01 7 views
2

私はまだHaskellとFRPの周りを頭で覆そうとしています。具体的には、私は、反応性バナナパッケージを使用し、FRPを入手し始めるいくつかの例を取り上げました。Haskell Reactive-Banana FRPとイベントループ

しかし、入力イベントがいつ発生したかをイベントネットワークがどのように知っているかはまだ分かりません。私の理解では、イベントループがユーザーの入力を絶えずチェックしているNodeJSとは異なり、FRPはユーザー入力や外部信号を「待機」または「確認」するために異なるフレームワークを利用しています。

私の読書から、FRPは時間を明示します。イベントまたは行動のいずれかと時間を結び付けることによって、ネットワークはいつか外部刺激がいつ発火したかを常に知っている。

私はConal、Hudak、et al。によって多くの論文を読みました。説明はあまりにも技術的です。技術的な説明を少なくしてください。

ありがとうございました。

+0

私は実際の単語IOのものを使用してイベントに - ちょうど*チート*を考える* - 例えば[this](https://hackage.haskell.org/package/reactive-banana-sdl-0.2.0/) SDL.html#runSDLPump)はSDLタイマーを使用して、あなたの基礎を築くために似たようなもの(通常の必須/非同期/イベントベースの 'IO'のもの)を使っていることを理解してから([ここ](https://hackage.haskell.org/package/reactive-banana-1.1.0.1/docs/Reactive-Banana-Frameworks.html)を参照してください) – Carsten

+0

私は、FRPライブラリを接続するいくつかの例を書いています現実世界のUIのもの。 [反応するバナナをGLUTに接続する例](http://stackoverflow.com/questions/15129677/simpler-alternative-libs-to-reactive-haskell/26112094#26112094)では、_real world IO stuff_からのイベントの発生を示しています。 [Reactive-Bananaと光沢を結ぶ例](http://stackoverflow.com/a/20677522/414413)では明示的なイベントループでステッピングイベントを実演していますが、IOを介して 'Reactive.Banana .Frameworks'。 – Cirdec

答えて

3

次のように、心の中で基本的なEventのコレクションを提供し、興味深いEvent sおよび基本的なものからBehavior Sを構築すると懸念されたFRPの区別、およびプラットフォーム固有の「グルーコード」を、維持するのに便利です現在のマウスの位置またはキーボードの押下。

リアクティブバナナライブラリでは、この区別はモジュール構造に反映されます。Reactive.Banana.Combinatorsは最初の部分に関係しますが、は2番目の部分に関係します。

ここで、第2部分(基本Events)の仕組みを理解することは、第1部分(FRP)の仕組みを理解する上で重要ではありません。実際、異なるライブラリは非常に異なる実装選択肢を作るかもしれません。

Reactive-Bananaライブラリでは、イベントネットワークは本質的には、外部イベントソース(ライブラリ内のAddHandlerと呼ばれます)に自身を登録する巨大なコールバック関数です。これらの外部ソースの1つがコールバック関数を呼び出すたびに、後者はEventBehaviorのグラフを従属順にたどり、内部状態に必要な更新を実行し、最後にreactimateで事前に登録されたアクションを実行します。

FRPの魔法は、「イベントネットワーク=巨大なコールバック関数」を知ることは時々役に立ちますが、ライブラリユーザーにこれらの実装の詳細が表示されないことです。

+0

ハインリッヒに感謝します。私はあなたの仕事から多くを学んだ。とても有難い。私はフォローアップの質問があります。イベントと動作の間のフローと相互接続は、イベントネットワークと呼ばれます。これはグラフと同じですか? – phage

+0

@phageはい、本質的に同じことを意味します。私はわずかに区別しています:私は通常、イベント、ビヘイビアーとそれらの接続を参照するために "グラフ"を使用し、IOアクションと登録されたイベントハンドラーと一緒にこの*を参照するために "ネットワーク"を使用します。言い換えれば、前者を「純粋」、後者を「不純」と考える。しかし、実際には、それを書いているときに、より正確な名前を付けることを望んでいて、それはちょうど名前の小さな区別です。 –

関連する問題