問題タブ [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 - どのFRPパッケージを選択しますか?
Haskellの関数型リアクティブプログラミングの世界を調べ始めたばかりです。リアクティブな設定でGUIプログラミング(実質的なバインディングのためにgtkを使用)を試してみたいと思います。
今、私はグレープフルーツ、リアクティブバナナ、バスターを少し見てきましたが、いずれかのパッケージを使用することの喜び/恐怖の証をお願いします。
私が持っているのは、これらの予備的な意見だけです。
抽象化されたバックエンドのアイデア(Grapefruitが持っている)については曖昧な感じがあるので、FRPパッケージをgtkにバインドすることを気にしないでください。
型理論は興味深いと思いますが、実際のプログラムの単純なエンコーディングも重視しています。これにより、grapfruit-recordsが少しずれているようです。
つまり、もちろんあなたの何人かが私に他のことを考えるように説得しない限り:-)
haskell - Haskellのreactive-bananaのreactive-webのflatMapに相当するものは何ですか?
別のイベントストリームまたはシグナルの着信値に応じて、次にどのイベントストリームから発行するかを選択するreactive-bananaの関数を探しています(動作?)。scala、reactive-web のライブラリでは、これは次のように行われます。
ありがとう !
haskell - Reactive-Banana でのスピル関数のイベント処理の順序は?
これをテストしたところ、イベント処理の順序はソース イベントのリストの順序と同じようです。ドキュメントには次のようにしか記載されていないため、これに頼ることはできないと思います。
同時発生イベントを発行します。厳密には、 Spill があります。収集 = ID
次のような仕様で、スピルに似た関数を作成するにはどうすればよいですか。
最初と最後の間に他のイベントが発生しないことを保証して、連続したイベントの発生を発行します
それとも、別のアプローチを試す必要がありますか? Reactive-Banana にマクロ機能を実装しようとしています
haskell - Cabalは、ubuntu 12.04にreactive-banana-wxをインストールします
apt-get から haskell-platform をプルダウンして Ubuntu 12.04 を新規インストールしました。reactive-banana-wx をインストールしようとすると、次のようになります。
再インストールを強制すると、次のようになります。
これを回避する方法についてのアイデアはありますか、または依存関係が更新されるか、haskell-platform の新しいバージョンを待つ必要がありますか? 可能であれば、すべてをUbuntuの標準インストールに近づけたいと思います。
ありがとう!
haskell - Reactive-banana: fromPoll からの最新の値
Haskell でリアクティブ バナナを使用して音楽プレーヤーを作成しています。私が抱えている問題の 1 つは、fromPoll で最新の値を取得することです。ユーザーが再生中にトラックの一部を任意に選択できるようにしたい。私のコードは次のようになります。
上記のgetPositionは部分的な関数であり、再生が実際に開始される前にNothingを返します。問題は、addCmdEventが初めて発生すると、bPositionがまだNothing値を保持していることです。eSetStart/Endは、これに基づいて値を計算します。そうして初めてbPositionが更新され、これが次回の addCmdEvent の起動時に使用される値になります。など、いわば値は常に「1つずれている」ことになります。
関連するSO questionがありますが、その場合、動作の新しい値を計算するために使用できる「トリガー」イベントが存在します。fromPollでそのようなことは可能ですか?
haskell - Reactive-banana と SDL を使用したフル クリック/KeyPress イベント
フル クリック イベントは、私の知る限り、マウスの動きを伴わないボタンの上下です。SDL は、Button Up および Down イベントのみを提供します。
reactive-banana
「キーダウンしてからキーアップ」を表現する方法はありますか?
ちなみに、「キーがまだ押されている」というイベントが必要な場合は、SDL を有効にしenableKeyRepeat
て、keyDown イベントが再度発生するようにする必要があります。それをFRPで正しく表現するには?
haskell - zipEの実装::イベントta->イベントtb->イベントt(a、b)
私は一般的に反応性バナナとFRPに慣れていないので、明らかな何かが欠けている場合はお詫びします。
私のプロジェクト(GDB / MIフロントエンド)では、GUIとフロントエンドロジックモジュールの両方にリアクティブバナナ(バージョン0.6.0.0)を使用しています。前者はうまく機能しますが、後者の場合は明らかに追加のコンビネータが必要です。
それらの1つはですzipE :: Event t a -> Event t b -> Event t (a, b)
。残念ながら、私が思いつくことができるのはchanges
、イベントタイプでジェネリックではなくを使用するNetworkDescriptionモナドのソリューションだけです。
もちろん、私はこれに満足していません。したがって、使用せずに汎用zipE関数を実装する方法を尋ねたかったのchanges
です(これは、GUI以外の目的で使用することはお勧めしません)。
他の試みは失敗しました、例えば
その結果、タプルの最初の要素が1つシフトします。これは、によって導入された「わずかな遅延」が原因だと思いstepper
ます。stepper
しかし、 (またはそのことについては)イベントから動作を取得する方法がわかりaccumB
ません。また、動作のないイベントに関数を適用する方法もわかりません。そして全体として、ジェネリック型の場合にステッパーに初期値を提供する方法がわかりません。
haskell - 状態の更新による状態依存のイベント処理
プロジェクト(GDB / MIフロントエンド)にFRP(つまり、リアクティブバナナ0.6.0.0)を使用したいと思います。しかし、イベントネットワークを宣言するのに問題があります。
GUIからのコマンドと、GDBからの停止イベントがあります。両方を処理する必要があり、それらの処理はシステムの状態によって異なります。
私の現在のアプローチは次のようになります(これは問題を示すために必要な最小限の複雑さだと思います):
handleCommand
handelStopped
現在の状態に応じて、コマンドに反応し、イベントを停止します。考えられる反応は、(同期)GDB I / O関数の呼び出しと、状態更新イベントの発生です。例えば:
問題は、f
によって評価されるときにaccumE
、state'
とは異なる場合があることですstate
。
時間と同時性の意味論と反応性バナナの「反応」の順序を完全に理解していないので、なぜこれが起こるのか100%確信が持てません。しかし、によって起動された状態更新関数は、状態を変更するhandleStopped
前に評価される可能性があると思います。f
f
とにかく、 「現在の」状態の仮定が時々間違っているので、このイベントネットワークは一貫性のない状態につながります。
私はこの問題を1週間以上解決しようとしてきましたが、理解できません。どんな助けでも大歓迎です。
haskell - 機能的-バナナトラベラーゲーム-興味をそそる狂気
リアクティブバナナを使用して、ボットを作成できるトラベラーゲームを作成したいと思います。FRPは私にとってまったく新しいものであり、私はスタートを切るのに苦労しています。始めたときはもっと手の込んだグラフを作成しましたが、ここでの目的のために、できるだけシンプルにするように努めました。主にどこから始めればよいか、そしてこの大きな問題を小さな問題に分解して解決する方法について、いくつかのガイダンスが必要です。これが初期設計です。
アイデアは、LNodeのグラフを作成することです(簡単にするために、今のところ無視している重み付きエッジを使用します)。私がsとして説明するこれらのLNode Planet
。には名前があり、とPlanet
のプレイヤーのマップがあります。プレイヤーはID、リソース、惑星を持っています。ここにデータ構造といくつかの関連する機能があり、その後にさらに議論が続きます。Planet
Resource
これが私がこれまでに知っていることです、私のイベントはタイプPlanet
とを含みますPlayer
。行動には、移動、参加、取得、および与えることが含まれます。プレイヤーが参加すると、新しいPlayer
イベントが作成され、バルカンのマップがそれで更新されPlayer
ます。移動は、がエッジで接続されているLNode
場合に、1つから別のトラバーサルを許可します
。Takeは、現在の「オン」からLNode
削除し、それらをに
追加します。Giveは反対のことをします。resources
Planet
Player
resources
Player
この大きな問題を小さな問題に分割して、この問題に頭を悩ませることができるようにするにはどうすればよいですか?
更新:ハント・ザ・ワンパスはFRPの学習に役立つ良い選択ではないことが判明しました。ここで、FRPの目的の説明を参照してください。これは、ハインリッヒ・アフェルムスによる回答です。
そうは言っても、今のところネットワークコードは完全に無視します。タイミングなどをテストするために、ダミーのボットをいくつか書くことができます。
更新:一部の人々はこの問題に興味を持っているようですので、ここで関連する質問を追跡します。
haskell - Reactive Banana の mapAccum 関数はどのように機能しますか?
ここで、Reactive Banana ライブラリの使用に関する問題の解決策を見つけようとして、Stack Overflow に関する質問に対する多くの回答を見てきました。すべての答えは、私がよく理解できない「mapAccum」を使用した魔法を使用しています。accumE
API ドキュメントを見ると、「との効率的な組み合わせ」しか見つかりませんaccumB
。これはあまり役に立ちません。
この関数はBehavior
、私がやりたいことである 2 つの連続したイベントの時点での値を比較するために使用できるようです。しかし、それを機能させる方法がわかりません。
正確にはどのように機能しmapAccum
ますか?