問題タブ [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 投票する
1 に答える
158 参照

json - Haskell を使用した巨大な json 配列のサブサンプリング

完全にメモリにロードすることを避けたい巨大な Json ファイルがあります。その構造は非常に単純です。内部に任意の要素を持つ大きな配列で構成されています。ほとんどの要素をランダムにドロップし、変換された Json を出力するだけで配列を変換したいと思います。

Haskell は、すべての怠惰なこの問題に適しているようで、Haskell の優れた演習になると思いました (私は専門家ではなく、FP 理論もあまり知りません)。

pipes-aeson [1] を見つけました。例はほとんどなく、Pipe を使用してデータをダウンサンプリングすることはできますが、Parser オブジェクトを使用するのはより複雑に思えます。私が見つけたオプション (evalStateT) は厳密で、私が介入することなく全体を解析します。

Lenses が私の問題の解決策になるかもしれませんが、それらは非常に抽象的であり、それらが何であるのか、どのように使用するのかわかりません。

私よりも知識のある人が少しのガイダンスを提供できますか?

[1] https://hackage.haskell.org/package/pipes-aeson-0.4.1.3/docs/Pipes-Aeson.html#t:DecodingError

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

haskell - パイプが内部関数を定義する理由

私はパイプライブラリのソースコードを見ています。たとえば、コアモジュールでは、作者がそのような関数を定義するパターンを使用してあちこちにいる理由がわかりません:

または:

または:

これは、いくつかの最適化を有効にするためのトリックですか? それが最適化のトリックである場合、コンパイラがそのようなことなしにそれを実行できることを本当に望んでいます。でも、もしかしたら別の理由があるのでは?

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

haskell - アップストリームが使い果たされたことをダウンストリームに通知する

質問

HaskellパイプPipeライブラリを使用して、次の型でを定義しようとしています。

ここで、Valueデータ型は次のように定義されます。

パイプは次の法律に従う必要があります。

言い換えれば、パイプは と同等である必要がありますが、すべての上流の値が処理された後Pipes.Prelude.map Valueに追加の値を生成しExhausted、下流に何らかの最終アクションを実行する機会を与える必要があります。

そのようなPipeものを定義できますか?

ノート

ライブラリpipes-parseが関数drawparseForever. Pipeこれらは便利に見えますが、上記の仕様に一致するにそれらを組み合わせる方法がよくわかりません。

0 投票する
3 に答える
182 参照

haskell - パイプを使用してダブルタブをシングルタブに置き換える方法は?

次のように、バイト文字列内の連続するすべてのタブを単一のタブに置き換える必要があります。

になる

やり方がわかりません

30 分ほど考え抜いた後、最初に出現した二重タブを次のように置き換えることができました (これでさえ実際には間違っています。空の文字列にタブが追加されます)。

ただし、連続するタブをすべて置き換える方法はまだわかりません。

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

haskell - Haskell Pipes を使用して、以前にフラット化されたストリームをネストする

バックグラウンド

コンテンツをコンスタント メモリにストリーミングしたい大きなファイルの長いストリームがあります。

Haskell Pipes ライブラリを使用して、次のネストされた型でこのストリームをモデル化しています。

つまり、外側のプロデューサーはファイルを反復処理し、内側のプロデューサーはファイル チャンクを反復処理します。

問題

会計上の目的で、このネストされたストリームを次のタイプのものに一時的にフラット化したいと思います。

どこ:

この変換を実行する関数を書くのは簡単に思えます:

ただし、逆変換の書き方がわかりません。

そのような:

関数nestFlattenedStreamを定義できますか?

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

haskell - なぜ Effect はすべてのフローではなく、2 つのフローのみを封印するのですか?

これは、パッケージEffectの公式チュートリアルで提供されている図です。pipes

Effectにはデータの流れがないのでProxy X X X X、すべての流れを封印するだけだと思っていました。ただし、代わりに、2 つの流入を許可します。それには特別な理由がありますか?Effectsignature を使用して、a が通常行うことを単に記述した場合Proxy X X X X、コンパイラを完全に正常に渡すことができます。

runなぜこのようなことができないのでしょうか。