問題タブ [haskell-pipes]
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 - Control.Proxy を使用するように StateT IO モナドを変換する - サーバーとクライアントはどちらですか?
ゲームエンジンを実装しています。現在、私のコードのほとんどはStateT Game IO ()
モナドにあります。私は IO を使用してユーザー入力を取得します。実際には、すべての IO チャネルが 1 つの関数を介して、
これは、提示されたすべてのオプションをユーザーに促し、応答を読み取り、それを返します。ユーザー応答 (および初期状態) の特定のフローでは、ゲームは決定論的に進行します。これらのユーザー応答を除外して、テストに役立てたいと思います。
これを Pipes を使用するように変換しようとすると、現在 にあるすべてのコードを変更してStateT Game IO ()
で実行するのが最も似ていますProxy p, Monad m => Client p [String] String m ()
。このようにして、ユーザーからの選択を「要求」することができます。これにより、必要に応じてユーザーの選択が提供されると仮定して、ブロック スタイルでエンジン コードを記述できます。
しかし、これは間違っているようです。ユーザーはクライアントであり、ゲーム エンジンはサーバーである必要があります。この区別を正しく行うために、どのような原則を使用できますか?
haskell - 複数の通信タイプを持つパイプを使用するにはどうすればよいですか?
このコードがあるとします:
現在、クライアントは常に を送信Int
し、受信しBool
ます。ただし、クライアントがサーバーがこれまでに確認した最高値を照会できるようにしたいと考えています。()
なので送受信の通信も必要Int
です。Either Int ()
これをクライアントの送信および受信としてエンコードできますEither Bool Int
。ただし、この 2 つが混在しないようにしたいと思います。 を送信すると、Int
常にBool
応答が返されます。
これはどのように行うことができますか?
haskell - Haskell Control.Proxy.TCP プロデューサー
Control.Proxy.TCP ライブラリで遊んでいて、ネットワーク ソースから Producer を作成したいと考えています。
上記のコードは型チェックを行いません:
nsocketReadS と socketWriteD の基本モナドは IO ですが、別の型が必要です。この問題を修正するにはどうすればよいですか?
haskell - Pipes を使用した単純なプログラムがハングする
runhaskell Toy.hs
で実行すると出力が生成されず、代わりに無期限にハングする次のプログラムがあります。私の理解では、プログラムは「hi」を出力して終了する必要があります。このような問題をデバッグする方法についての回答やアドバイスをいただければ幸いです。github から Pipes 4.0.0 を使用しています ( github.com/Gabriel439/Haskell-Pipes-Library )。
haskell - 動的な要求/応答タイプのパイプ?
これは理にかなっているように思えますが、タイプの問題があります。Client
オプションのリストを に送信できる が必要Server
です。これは、オプションを選択して、選択した要素を返します。だから、このようなもの:
アイデアは、サーバーがa -> String
リストの各要素で関数を呼び出して、それらをユーザーに表示できるということです。リストと関数が一致する限り、a を変更できるようにしたいと考えています。
このようなことは可能ですか?たぶん、私が望む制約は何らかの方法でGADTにエンコードできますか?
haskell - ProxyFast/ProxyCorrect の MonadTransControl インスタンス
パイプを使用して、ProxyFastまたはProxyCorrect型のMonadTransControlのインスタンスを作成しようとしています。これは私が持っているものです:
liftWith や restoreT の書き方がわかりません。他のモナド トランスフォーマーのインスタンスはすべて、モナドを「交換」する関数を使用します。ProxyCorrect / ProxyFast の MonadTransControl のインスタンスはどのように見えますか? それとも書くことは不可能ですか?(はいの場合、パイプ 4.0 で可能ですか?)
haskell - await ごとに 1 つの利回り制限付きパイプは可能ですか?
私はpipes-4.0.0で作業しています。そのライブラリでは、パイプが行う下流へのyieldの数は、一般に、上流からの待機の数とは無関係です。
しかし、モナディック (>>=) を使用してこれらの種類のパイプをシーケンスできる一方で、各 await に対して 1 つだけの yield が実行されることを強制する制限付きパイプを構築したいとします。
双方向の場合、プロキシによってアップストリームから要求された各値は、返された値と一致することがわかりました。したがって、おそらく私が探しているのは、Proxy a' a () b m r -> Pipe a (Either b a') m r
上流に向かう値を「反映」し、それらを下流への追加の利回りに変えるタイプの関数です。または、あまり一般的ではありませんが、Client a' a -> Pipe a a'
. そのような機能は可能ですか?
haskell - パイプを使用してストリームのサブセットを折りたたむ 4.0
パイプ 4.0 を理解しようとしていて、いくつかのコンジット コードを変換したいと考えています。s のストリームがありInt
、最初の 5 つをスキップして、次の 5 つの合計を取得したいとします。単純なリストを使用すると、次のようになります。
コンジットでは、これは次のようになります。
または完全なプログラムとして:
ただし、パイプでこれを行う方法はよくわかりません。