問題タブ [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.
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
haskell - アップストリームが使い果たされたことをダウンストリームに通知する
質問
HaskellパイプPipe
ライブラリを使用して、次の型でを定義しようとしています。
ここで、Value
データ型は次のように定義されます。
パイプは次の法律に従う必要があります。
言い換えれば、パイプは と同等である必要がありますが、すべての上流の値が処理された後Pipes.Prelude.map Value
に追加の値を生成しExhausted
、下流に何らかの最終アクションを実行する機会を与える必要があります。
そのようなPipe
ものを定義できますか?
例
ノート
ライブラリpipes-parse
が関数draw
とparseForever
. Pipe
これらは便利に見えますが、上記の仕様に一致するにそれらを組み合わせる方法がよくわかりません。
haskell - パイプを使用してダブルタブをシングルタブに置き換える方法は?
次のように、バイト文字列内の連続するすべてのタブを単一のタブに置き換える必要があります。
になる
やり方がわかりません。
30 分ほど考え抜いた後、最初に出現した二重タブを次のように置き換えることができました (これでさえ実際には間違っています。空の文字列にタブが追加されます)。
ただし、連続するタブをすべて置き換える方法はまだわかりません。
haskell - Haskell Pipes を使用して、以前にフラット化されたストリームをネストする
バックグラウンド
コンテンツをコンスタント メモリにストリーミングしたい大きなファイルの長いストリームがあります。
Haskell Pipes ライブラリを使用して、次のネストされた型でこのストリームをモデル化しています。
つまり、外側のプロデューサーはファイルを反復処理し、内側のプロデューサーはファイル チャンクを反復処理します。
問題
会計上の目的で、このネストされたストリームを次のタイプのものに一時的にフラット化したいと思います。
どこ:
この変換を実行する関数を書くのは簡単に思えます:
ただし、逆変換の書き方がわかりません。
そのような:
関数nestFlattenedStream
を定義できますか?
haskell - なぜ Effect はすべてのフローではなく、2 つのフローのみを封印するのですか?
これは、パッケージEffect
の公式チュートリアルで提供されている図です。pipes
Effect
にはデータの流れがないのでProxy X X X X
、すべての流れを封印するだけだと思っていました。ただし、代わりに、2 つの流入を許可します。それには特別な理由がありますか?Effect
signature を使用して、a が通常行うことを単に記述した場合Proxy X X X X
、コンパイラを完全に正常に渡すことができます。
run
なぜこのようなことができないのでしょうか。