問題タブ [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.

0 投票する
1 に答える
80 参照

haskell - 反応バナナ 1.0 モナディック API: 再帰動作を今すぐ定義する方法は?

反応バナナ<1.0.0では、これは機能しました:

現在、counterはそれ自体で定義されています。しかし、新しいモナド API では、accumBはモナド関数であり、これはどのように進めればよいか分からないところです -インスタンスMomentがありません。MonadFix

明らかな理由により、これは機能しません (「範囲外: カウンター」)

今それを行う正しい方法は何ですか?前もって感謝します!

0 投票する
1 に答える
46 参照

reactive-banana - 反応バナナ webkit DOM ボイラープレート

reactive-bananaoverはありますか (または意味がありwebkitgtk3ますか) DOM? もともと私は探していましreactive-banana-gtkたが、ウィジェットが硬直的であり、Haskell から新しいウィジェットを定義する簡単な方法がないことに気付きました。一方、DOM一緒に私のニーズを満たすことができます。cssこれがユースケースを正当化することを願っています。

reactive-bananaやり直すために何をする必要がありGraphics.UI.Gtk.WebKit.DOMますか?

hackagegithub、またはグーグルで検索しても何も見つかりませんでした。

0 投票する
1 に答える
101 参照

monads - 反応バナナでモナド動作を作成する方法

キーの押下をキャッチし、それに応じてコード バッファーを操作するとします。

別の動作を作成したいbEval

コードの状態をその評価にマップします (何かが実際に変更された場合にのみトリガーされます)。

ただし、評価はモナドで行われInterpreterます (ハックから考えhintてください)。実際にそのような動作を定義できますbEvalか? Interpreter Stringで累積して、動作の状態としてドラッグすることもできると思いますが、実際にcurrentAccumState >>= eval nextEventどこでrunInterpreter評価を強制するのでしょうか?


編集:重要なことは、アクションは単に状態を変更するだけではなくIO ()、何らかの状態を変更することになっているということです。たとえば、バッファのクリア/カウンターのリセット/ジッパーの周りの移動を検討してください。

私の考えは次のようなものでした:

なぜこのようなことができなかったのかわかりません。ただし、動作でそれを取り除く方法もわかりませんIO:)。

IOオカレンスがreactive-banana実際にのみではないのはなぜMonadIOですか?

0 投票する
1 に答える
245 参照

unit-testing - Reactive Banana 1.0.0 - MomentIO() モナドでの単体テスト

これは、特定のモナド アクションの動作を調査するために使用してきたイベント ネットワークのサンプルです。コードをテストするこのアドホックな方法ではなく、原則に基づいたアプローチが必要です。自分の関数をテストする方法は知っていますが、新しい設計の選択肢があるため、ビヘイビアとイベントをテストするためのベスト プラクティスを探しています。reactive-banana 1.0.0

私の問題を説明するために必要なものだけを含めることを期待して、私は多くを省略しています。問題を明確にするために含めるべき何かが欠けている場合はお知らせください。

バッファが行うことになっているのは、蓄積されたプレーヤー コマンド (後で別の場所で処理される) であり、プレーヤー コマンドの特定のバッチが処理されると空になります。次のティックで、それは再び起こります。

バッファが本来あるべきときにクリアされ、想定されているようにコマンドが蓄積されるようにしています。現在、コードは機能しており、このゲームを構築する際にコードが機能し続けることを保証するためのテストを作成したいと考えています。

上記の例ではバッファをネットワークBehaviorから切り離すことができましたが、ではどうすればよいでしょうか? Eventテストから正確な結果を得る最良の方法は何ですか?

編集: 更新 -このリンクで十分なヒントが得られると思います。詳しくは明日調べて報告します。

編集: 更新 - 単体テストを作成しました。きれいになったらgithubにアップロードしてから投稿します。上記のリンクは、何をすべきかを整理するのに非常に役立ちました。

編集: 更新 - スタック テストを実行して型エラーが発生し、再度実行すると、テストが合格したという出力が得られます。結果として、私は昨日の私に近づいていません。コードとより明確な問題があります。そのために別の投稿を始めるかもしれません.ct

編集:更新 - 役立つ方法で壊れるテストがありますが、正確に何をすべきかわかりません。コンテキストのためにプロジェクト全体を投稿しました。以下に、テストコード、エラー、およびいくつかの説明のみを含めます。

問題は、 で をaccumB作成することに帰着BehaviorMomemtIOます。bufferPopulated返品した場合、どうすればそれIO Boolを調整できますか?

編集: 明らかなことは、必要なインスタンスを作成することです。これはおそらくニシンだと思います。どう思いますか。MomentIO Boolこれはインスタンスを書くだけで簡単ですか?

編集:更新私は正しい軌道に乗っていると思います。すべてのテスト ハーネス コードをコメント アウトし、署名を変更しましたbufferPopulated

これでうまくいくと思いますが、ここにエラーがあります

MonadMomentから見てみましょう。Reactive.Banana.Combinators

mは任意Monadです。に持ち上げる必要がありますが、そうしないのはなぜですか。私の推論の何が問題になっていますか?IOMonadliftMomentMoment Behavior (BufferMap)IO Behavior (BufferMap)

0 投票する
1 に答える
95 参照

haskell - accumB から遅滞なく更新を取得する

のドキュメントにaccumBは次のように書かれています:

注: ステッパーと同様に、動作の値は、イベントが発生した "少し後に" 変化します。これにより、再帰的な定義が可能になります。

私の場合、再帰はありませんが、「少し後」ではなく「今すぐ」更新を取得したいのです。の特別バージョンがないのはなぜaccumBですか? 私は、明らかな何かが欠けていると思いますか?


編集:私のアプリケーションではdata Config、さまざまな構成値と、Event (Config -> Config)ユーザーが GUI で値を変更したときに起動される一連の を保持しています。今、私は自分のプログラムの他の部分がConfigいつでもアクセスできるようにしたいので、Behavior Configそこで使用しました。問題は、イベントの変更が発生したときに、動作に古い値が残っているConfigため、この変更をすぐに確認できないことです。

0 投票する
1 に答える
94 参照

haskell - 現在のティックの値と前のティックの値の差を含むイベントを作成する方法は?

ゲームのようなプロジェクトにreactive-bananaand sdl2(このグルー ライブラリを使用) を使用しています。は、「マウスのBehavior絶対位置」およびBehavior「マウスの相対位置」(別名マウスの動き) に対して作成されます。FRP を使用しない場合、これはうまく機能しますが、FRP を使用すると、「相対的なマウスの位置」が問題になります。少量のデータしか通過しないようです。これは、基礎となる「SDL イベント」( a で表すBehavior) が tick とうまく一致しないために発生すると思われEventます。

したがって、現在のティックでのマウスの位置を前のティックでの位置と比較するだけで、自分のマウスの動きを計算したいと考えています。これで問題が解決するかどうかはわかりませんが、希望はあります:)

まず第一に、私はそれにアプローチする方法に迷っています:Stateモナド、または 、IORefまたはreactive-banana別の手段を提供しますか?

現在持っているコードの一部を抜粋します。

上で説明したように、現在の(として知られている) と以前の の値で表現mouseMovementEしたいと思います。mousePositionBtickEmousePositionEmousePositionEtickE

どんな助けでも大歓迎です!