問題タブ [reactive-banana]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Gtk2Hs でリアクティブ バナナを使用するには?
反応バナナの経験を積もうとしています。そのウェブサイトによれば、GTKをサポートする必要があります。それを行う方法に関するチュートリアル/入門資料があるかどうか疑問に思っていましたか?
SO で jaek プロジェクトがあることを読みましたが、FRP や反応性バナナの経験がないため、gtk2hs (hackage の gtk3) で反応性バナナを使用するための最小限の例をもっと探しています。
また、reactive-banana-wx が Windows/MinGW で動作するように何度も試みました。最終的に wxHaskell をインストールすることはできましたが、事前に実行時エラーが発生しました ( https://stackoverflow.com/questions/23367950/wxc-segfault-in-wxhaskell )。wxHaskell を Windows で動作させる方法についてのその後の指示はなく、質問だけだったので、すべてを 2010 以前にダウングレードしない限り、wxHaskell を適切に動作させることはできなかったと思います。
今日はGtk2Hsをインストールしてみました。gtk3 でも簡単でした。このルートに初心者向けの優れた資料があるかどうか疑問に思います (つまり、reactive-banana + gtk2Hs)。
ありがとう、
haskell - 反応バナナGLFWイベント登録例
関連するスレッドでは、修正が容易であると思われる準コードの例が示されています。
ここまで直せませんでした。キーイベントを登録する機能コードのスニペットを誰か提供できますか?
haskell - リアクティブバナナで現在時刻を扱う
反応バナナで現在の時刻をどのように処理しますか?
理想的にはBehaviour
、現在の時刻を取得するために「ポーリング」できる が必要です。Behaviour
ただし、 s をEvent
(経由<@
などで)ポーリングすると、現在の値ではなくBehaviour
、以前 Event
の の値が得られます。(これは、実際に有用な循環定義を避けるためだと認識しています。)
fromPoll
役立つと思ったもの を見つけました。Behaviour
から観察される s はfromPoll
、それ自体に依存することはできないため、前の発火の直後ではなく、これが発火する直前の動作を観察することによってサイクルを導入することはできません。Event
Event
余談
より形式的な言い方をすれば、 s は常に時刻t+にEvent
発生し、常に時刻t-に観察される、つまり、それらの直前に発生する非常に短い時間に発生する動作を観察することを示唆しています。および友人によって生成された s の新しい値は、常に時刻 t+ から開始されるため、時刻t+にも発生する s によって観測できませんでした。Behaviours
Event
Behaviour
accumB
Event
この提案されたセマンティクスの下では、Behaviour
によって作成された s は、それぞれが処理fromPoll
される直前に更新されます。Event
他Behaviour
の は、友人によって作成されているため、後で更新されaccumB
ます。
私のユースケース
とにかく、それは私の主な質問に対する重大な余談です。反応バナナで現在の時刻 (前 の時刻ではなく)を処理する方法があるかどうかを知りたいです。Event
私の使用例は、たとえば、エンティティが送信する ping を追跡し、それらのいずれかが特定の時間間隔で ping を送信していない場合に警告イベントを通知することです。
もちろん、私は非常に頻繁にイベントを発生させることができますし、今後もそうするつもりです。しかし、それらが正確ではないのは疣贅のようです。
これに対処する正しい方法は何ですか?
haskell - 以前の更新に基づいて UI を動的に更新する
私はUIのFRPの実用的な側面についていくつかの研究を行っており、リアクティブバナナを使用して次の機能を実装するのに苦労しています:選択ボックスの値に基づいて、いくつかの結果を表示する可変量のリストボックスがレンダリングされます. (私は WxHaskell を使用しています。)
結果ビヘイビアーに基づいて非表示および表示される一連の準備済みリスト ボックスを使用してこれを実装するのは非常に簡単でしたが、今回は必要に応じてリスト ボックスを作成および破棄し、各リスト ボックスが結果ビヘイビアーにリンクされるようにします。
これまでのところ、次の成分があります。
eParam
選択ボックスにバインドされたイベント- すべての結果 (リスト ボックスごとの項目のリスト) を保持する(および) で
bResults :: Behavior t [[String]]
定義された動作eParam
stepper
updateResultControls :: [SingleListBox ()] -> [[String]] -> IO [SingleListBox ()]
結果に基づいてリスト ボックスを破棄または構築する更新関数。戻り値の型が IO であることに注意してください。
BarTabの例を見て、次の実装を試みました。
bResultControls :: Behavior t [SingleListBox ()]
として定義されるリスト ボックスでの動作stepper [] eUpdateResultControls
。eUpdateResultControls :: Event t [SingleListBox ()]
UI の更新を実行するイベント。bResultControls
このイベントは、動作とに依存しbResults
ます。ただし、ネットワークを更新して IO を実行する必要もあるため、関与する可能性があると思わMoment
れます。execute
ここで行き詰まりました。
私の最新の試みはこれです:
しかし、次のタイプのエラーが発生します。
これにはいくつかの動作のトリミングが含まれると思われます。または、おそらくこれについて完全に間違った方法で行っていると思います。
haskell - 再帰的であり、他の動作に依存する動作
私のネットワークは次のようになります。
ePhysics
タイマーから繰り返し発射されます。
の定義に問題がありますbPlayerPosition
。私が意図しているのは、 で開始され、 が起動される(0,0)
たびに、 をパラメーターとして使用して再計算されることです。ePhysics
bPlayerPosition
bPlayerForce
問題は、初期値を指定するためにaccumB
/を使用する必要があることですstepper
が、それらはイベントでのみ機能し、bPlayerForce
ビヘイビアのみが他のビヘイビアの値を取得できるため ( を使用<*>
)、力の値を取得できません。
代替手段は使用するだけ<*>
ですが、それでは初期値がないため、無意味な無限再帰になります。
3 つの質問があります。
- なしで動作から値を取得する方法はあり
<*>
ますか?reactimate
たとえば、イベントを ing またはマッピングするときは? できないという問題は、最初から常に私を悩ませてきました。 - 物理を行うためのより機能的な/FRPの方法はありますか? (一般的に、および質問に固有のもの)
- 提示された問題をどのように解決できますか?
haskell - プッシュプルとアロー化されたFRPは根本的にどのように異なりますか?
FRP を Haskell で勉強したいのですが、使用するライブラリを決めるのが少し難しいです。多くは失敗した試みのようですが、一部は復活したようです (Yampa での最近の活動など)。
私が読んだところによると、FRP には 2 つの「種類」があるようです: 一方のプッシュプル FRP (Reactive-banana や Reflex など) と、反対側の矢印化された FRP (Yampa のような)。Fran や FrTime の時代には "classic FRP" もあったようですが、最近の活動は見当たりません。
この 2 つ (または 3 つ) は、FRP の根本的に異なるアプローチですか?
そのうちの 1 つは時代遅れの理論で、もう 1 つは「未来のもの」でしょうか?
それとも、異なる目的に対応しながら、並行して進化する必要がありますか?
各カテゴリで最も有名なライブラリに名前を付けましたか、それとも考慮すべき他のオプション (Sodium、Netwire など) はありますか?
J. Abrahamson のコメントで推奨された [Evan Czaplicki の講演](https://www.youtube.com/watch?v=Agu6jipKfYw) をようやく見ました。それは非常に興味深いものであり、私にとって物事を明確にするのに役立ちました. この質問が面白いと思った人には強くお勧めします。
haskell - FRP で Behavior を使用する理由
リアクティブバナナを学んでいます。ライブラリを理解するために、誰かがボタンを押すたびにカウンターを増加させるダミー アプリケーションを実装することにしました。
私が使用している UI ライブラリは Gtk ですが、説明には関係ありません。
これが私が思いついた非常に単純な実装です。
これは結果をシェルにダンプするだけです。Heinrich Apfelmusの記事を読んで、この解決策にたどり着きました。私の例では、単一の を使用していないことに注意してくださいBehavior
。
この記事には、ネットワークの例があります。
この例は、stepper
を に変換し、を使用してを戻すEvent
aを示しています。上記の例では、 のみを使用できましたが、違いはなかったと思います (私が何かを理解していない場合を除きます)。Behavior
Event
changes
Event
では、いつ、どのような理由で使用するのか、誰かが光を当てることができますBehavior
か? Event
すべての s をできるだけ早く変換する必要がありますか?
Behavior
私の小さな実験では、どこで使用できるかわかりません。
ありがとう