問題タブ [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 - 反応バナナ 1.0 モナディック API: 再帰動作を今すぐ定義する方法は?
反応バナナ<1.0.0では、これは機能しました:
現在、counter
はそれ自体で定義されています。しかし、新しいモナド API では、accumB
はモナド関数であり、これはどのように進めればよいか分からないところです -インスタンスMoment
がありません。MonadFix
明らかな理由により、これは機能しません (「範囲外: カウンター」)
今それを行う正しい方法は何ですか?前もって感謝します!
reactive-banana - 反応バナナ webkit DOM ボイラープレート
reactive-banana
overはありますか (または意味がありwebkitgtk3
ますか) DOM
? もともと私は探していましreactive-banana-gtk
たが、ウィジェットが硬直的であり、Haskell から新しいウィジェットを定義する簡単な方法がないことに気付きました。一方、DOM
一緒に私のニーズを満たすことができます。css
これがユースケースを正当化することを願っています。
reactive-banana
やり直すために何をする必要がありGraphics.UI.Gtk.WebKit.DOM
ますか?
hackage
、github
、またはグーグルで検索しても何も見つかりませんでした。
monads - 反応バナナでモナド動作を作成する方法
キーの押下をキャッチし、それに応じてコード バッファーを操作するとします。
別の動作を作成したいbEval
コードの状態をその評価にマップします (何かが実際に変更された場合にのみトリガーされます)。
ただし、評価はモナドで行われInterpreter
ます (ハックから考えhint
てください)。実際にそのような動作を定義できますbEval
か? Interpreter String
で累積して、動作の状態としてドラッグすることもできると思いますが、実際にcurrentAccumState >>= eval nextEvent
どこでrunInterpreter
評価を強制するのでしょうか?
編集:重要なことは、アクションは単に状態を変更するだけではなくIO ()
、何らかの状態を変更することになっているということです。たとえば、バッファのクリア/カウンターのリセット/ジッパーの周りの移動を検討してください。
私の考えは次のようなものでした:
なぜこのようなことができなかったのかわかりません。ただし、動作でそれを取り除く方法もわかりませんIO
:)。
IO
オカレンスがreactive-banana
実際にのみではないのはなぜMonadIO
ですか?
unit-testing - Reactive Banana 1.0.0 - MomentIO() モナドでの単体テスト
これは、特定のモナド アクションの動作を調査するために使用してきたイベント ネットワークのサンプルです。コードをテストするこのアドホックな方法ではなく、原則に基づいたアプローチが必要です。自分の関数をテストする方法は知っていますが、新しい設計の選択肢があるため、ビヘイビアとイベントをテストするためのベスト プラクティスを探しています。reactive-banana 1.0.0
私の問題を説明するために必要なものだけを含めることを期待して、私は多くを省略しています。問題を明確にするために含めるべき何かが欠けている場合はお知らせください。
バッファが行うことになっているのは、蓄積されたプレーヤー コマンド (後で別の場所で処理される) であり、プレーヤー コマンドの特定のバッチが処理されると空になります。次のティックで、それは再び起こります。
バッファが本来あるべきときにクリアされ、想定されているようにコマンドが蓄積されるようにしています。現在、コードは機能しており、このゲームを構築する際にコードが機能し続けることを保証するためのテストを作成したいと考えています。
上記の例ではバッファをネットワークBehavior
から切り離すことができましたが、ではどうすればよいでしょうか? Event
テストから正確な結果を得る最良の方法は何ですか?
編集: 更新 -このリンクで十分なヒントが得られると思います。詳しくは明日調べて報告します。
編集: 更新 - 単体テストを作成しました。きれいになったらgithubにアップロードしてから投稿します。上記のリンクは、何をすべきかを整理するのに非常に役立ちました。
編集: 更新 - スタック テストを実行して型エラーが発生し、再度実行すると、テストが合格したという出力が得られます。結果として、私は昨日の私に近づいていません。コードとより明確な問題があります。そのために別の投稿を始めるかもしれません.ct
編集:更新 - 役立つ方法で壊れるテストがありますが、正確に何をすべきかわかりません。コンテキストのためにプロジェクト全体を投稿しました。以下に、テストコード、エラー、およびいくつかの説明のみを含めます。
問題は、 で をaccumB
作成することに帰着Behavior
しMomemtIO
ます。bufferPopulated
返品した場合、どうすればそれIO Bool
を調整できますか?
編集: 明らかなことは、必要なインスタンスを作成することです。これはおそらくニシンだと思います。どう思いますか。MomentIO Bool
これはインスタンスを書くだけで簡単ですか?
編集:更新私は正しい軌道に乗っていると思います。すべてのテスト ハーネス コードをコメント アウトし、署名を変更しましたbufferPopulated
これでうまくいくと思いますが、ここにエラーがあります
MonadMoment
から見てみましょう。Reactive.Banana.Combinators
m
は任意Monad
です。に持ち上げる必要がありますが、そうしないのはなぜですか。私の推論の何が問題になっていますか?IO
Monad
liftMoment
Moment Behavior (BufferMap)
IO Behavior (BufferMap)
haskell - accumB から遅滞なく更新を取得する
のドキュメントにaccumB
は次のように書かれています:
注: ステッパーと同様に、動作の値は、イベントが発生した "少し後に" 変化します。これにより、再帰的な定義が可能になります。
私の場合、再帰はありませんが、「少し後」ではなく「今すぐ」更新を取得したいのです。の特別バージョンがないのはなぜaccumB
ですか? 私は、明らかな何かが欠けていると思いますか?
編集:私のアプリケーションではdata Config
、さまざまな構成値と、Event (Config -> Config)
ユーザーが GUI で値を変更したときに起動される一連の を保持しています。今、私は自分のプログラムの他の部分がConfig
いつでもアクセスできるようにしたいので、Behavior Config
そこで使用しました。問題は、イベントの変更が発生したときに、動作に古い値が残っているConfig
ため、この変更をすぐに確認できないことです。
haskell - 現在のティックの値と前のティックの値の差を含むイベントを作成する方法は?
ゲームのようなプロジェクトにreactive-banana
and sdl2
(このグルー ライブラリを使用) を使用しています。は、「マウスのBehavior
絶対位置」およびBehavior
「マウスの相対位置」(別名マウスの動き) に対して作成されます。FRP を使用しない場合、これはうまく機能しますが、FRP を使用すると、「相対的なマウスの位置」が問題になります。少量のデータしか通過しないようです。これは、基礎となる「SDL イベント」( a で表すBehavior
) が tick とうまく一致しないために発生すると思われEvent
ます。
したがって、現在のティックでのマウスの位置を前のティックでの位置と比較するだけで、自分のマウスの動きを計算したいと考えています。これで問題が解決するかどうかはわかりませんが、希望はあります:)
まず第一に、私はそれにアプローチする方法に迷っています:State
モナド、または 、IORef
またはreactive-banana
別の手段を提供しますか?
現在持っているコードの一部を抜粋します。
上で説明したように、現在の(として知られている) と以前の の値で表現mouseMovementE
したいと思います。mousePositionB
tickE
mousePositionE
mousePositionE
tickE
どんな助けでも大歓迎です!