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

0 投票する
2 に答える
378 参照

haskell - MonadIO を実装する Monad 内に async を埋め込む

pipes-concurrency次のようなコードがあります。

質問 1 : これは明らかにコンパイルされませrunEffectん。これを行う方法はありますか?それとも、パイプラインが IO モナド内にエフェクトを含めるように強制するのに行き詰まっていますか?MonadIO m => m ()asyncIO a

質問 2 : MonadIO を実装する Monad 内に async を埋め込むことは理にかなっていますか? ここで自分自身をうまく表現できているかどうかはわかりません。

ありがとうございました!

0 投票する
2 に答える
171 参照

haskell - パイプ内でコンシューマーを実行する

コンシューマーの出力がパイプの入力に供給されるように、コンシューマーとパイプを構成する必要があります。

これは、次のようなコンビネータで解決できると思います。

またはこれ:

または次のようなリフティング関数:

またはこのように:

consumer >~ pipe私は成功せずにやってみました。では、これにどのようにアプローチするのですか?

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

loops - MonadPlus が「ジェネレータ」クラスである場合、「コンシューマ」クラスは何ですか?

Aは、ジェネレーター部分 ( ) とコンシューマー部分 ( )Pipeの 2 つの部分に分けることができます。yieldawait

Pipeジェネレーターの半分のみを使用し、返すだけ(または決して返さない) がある場合()、それは「ListT正しく行われた」として表すことができます。ListT MonadPlus-done-right のようなものを表すために使用できることがわかりました。ガブリエル・ゴンザレスの引用

ListTトランスフォーマーの依存関係のみを使用して、(パイプ内のものだけでなく)任意のものを構築できることに注意してください。たとえば、 のListTアナログを実装する方法は次のPipes.Prelude.stdinLnとおりです。

それはそこにあるものと同じようにチェックを入力ListTし、それらすべてに対して正しいことを行います。

だから私の質問はこれです:パイプのコンシューマー部分にデュアルがListTありますか?MonadPlus

要件:

  • yieldを使用せず、返すだけ()(または決して返さない) であるが、使用するパイプは、awaitこの「ListT のデュアル」として表すことができます。
  • 「ListT の双対」は「MonadPlus の双対」に一般化できます。
0 投票する
1 に答える
182 参照

haskell - Haste と Haskell でパイプを使用してスリープする

Pipes ライブラリを多用する Haskell プログラムに取り組んでいます。ライブラリの一部をHasteに移植しています。私がつまずきにぶつかった場所の 1 つは、javascript がスリープ状態を処理する奇妙な方法です。

私が書きたかったのは、結果を送信する前に遅延する単純なパイプでした

ただし、スリープはコールバックのように機能するようです。

やってみた

しかし、タイプは適切に並んでいません。遅延パイプを取得する方法はありますか?

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

haskell - パイプと非パイプ コード間の同時実行に関する考慮事項

私は、パイプ インターフェイスでのエンコーディング用に C ライブラリをラップしている最中ですが、いくつかの設計上の決定を行う必要があることに気付きました。

C ライブラリがセットアップされた後、エンコーダ コンテキストを保持します。これにより、いくつかのパラメーターをエンコードまたは変更できます (この最後の関数への Haskell インターフェースを呼び出しましょうtune :: Context -> Int -> IO ())。私の質問には2つの部分があります:

  1. エンコーディング部分は で簡単にラップできますが、Pipe Foo Bar IO ()も公開したいと思いtuneます。エンコーディング コンテキストの同時使用はロックで保護する必要があるため、パイプ内の反復ごとにロックをtune取得し、同じロックを取得して保護する必要があります。しかし今、ユーザーに隠しロックを強制しているように感じます。ここで間違ったツリーを吠えていますか? この種の状況は通常、パイプのエコシステムでどのように解決されますか? 私の場合、特定のコードが含まれるパイプは常に独自のスレッドで実行され、同時にチューニングが行われることを期待していますが、この観点をユーザーに強制したくありません。パイプエコシステムの他のパッケージは、ユーザーにどちらかを強制することはないようです。
  2. 使用されなくなったエンコーディング コンテキストは、適切に初期化解除する必要があります。パイプのエコシステムではIO、パイプが破壊されたときにそのようなこと (この場合はいくつかのアクションを実行すること) が確実に処理されるようにするにはどうすればよいでしょうか?

具体的な例は、圧縮ライブラリをラップすることです。この場合、上記は次のようになります。

  1. 圧縮強度は調整可能です。パイプを設置すると、楽しそうに流れていきます。圧縮コーデック コンテキストへの同時アクセスをシリアル化する必要があると仮定すると、パイプの実行中に圧縮強度の設定を変更できるようにするにはどうすればよいでしょうか?
  2. 圧縮ライブラリは、セットアップ時に Haskell ヒープから大量のメモリを割り当てました。パイプが破棄されたときに、ライブラリ関数を呼び出してこれをクリーンアップする必要があります。

ありがとう…これはすべて明白かもしれませんが、私はパイプのエコシステムにまったく慣れていません。

編集:投稿後にこれを読んで、これが私が今までここで尋ねた中で最も漠然とした質問だと確信しています. うーん!ごめん ;-)