問題タブ [conduit]
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.
xml - xml-conduit を使用した脆弱で冗長なコード
私はXML コンジットを使用して GPX パーサーを構築しましたが、要素を識別して不要なタグをスキップするための過度に冗長で脆弱なコードに問題がありました。
要素の識別 (マイナーな煩わしさ)
sのみを比較して、名前空間を明示的に無視していnameLocalName
ます。tag*
正しい名前空間をプログラムにハードコードし、関数で比較するためにヘルパーに要素名を作成させるのが正しい方法だと思いますか? これは、少なくとも 2 つの異なる名前空間 (GPX 1.1 と 1.0) をサポートする必要があるため、少し面倒です。これらの名前空間は十分に類似しているため、コードを変更する必要はありません。
スキップ要素
GPX は大きく、カスタム拡張機能のセットはより大きくなります。私が構築しているツールは限られた情報しか必要としないため、特定のタグとそのすべてのサブ要素を無視することにしました。例えば:
多数のサブ要素を持つ類似のタグを無視するためextensions
に、最後の要素まで要素を消費するシンクを作成しましたEvent
。
私のためにこれを行うバリアントがあるはずtag*
です(すべての子が消費されることなく成功します)が、単純なコンビネーターが不足しているか、パッチを送信する必要があることを示唆していないという事実はありますか?
haskell - コンジットを使用してファイルから読み取った行に番号を付ける方法は?
私は Haskell の初心者で、コンジット ライブラリに頭を悩ませようとしています。
私はこのようなことを試しましたが、コンパイルされません:
コンジットステートの状態は、コンジットの入力タイプと同じタイプでなければならないようです。または、少なくともそれがエラーメッセージから私が理解していることです:
これは、コンジットを使用してどのように行うことができますか? ファイルから行を読み取り、各行に行番号を追加したい。
haskell - コンジット チュートリアルからコードをコンパイルする
http://www.yesodweb.com/book/conduitsのコードを理解しようとしています。いくつかの修正 ( に置き換えるなど) の後Resource
でMonadResource
も、コンパイルされません。
次のエラーが表示されます。
私はGHC 7.4.1とconduit-0.4.2を使用しています。
PS 壊れていないチュートリアルや、conduit-0.4 を念頭に置いて書かれたチュートリアルはありますか?
haskell - コンジットを使用したソースの無限ループ
コンジットのハンドルを取得しようと決め、うまくやっていると思っていましたが、コンジット 4 でこの単純なソースを作成しようとすると、無限ループが発生し、理由がわかりません。これは単純化されており、元のバージョンでは一時ファイル名が作成され、yield を介して返されます。これは () を返すだけです。
私が実行した場合:
私は無限ループを取得します。5 回実行して 5 つの () のリストを表示しないのはなぜですか?
haskell - Haskellで`cat`を実装するにはどうすればよいですか?
cat
Haskellで簡単なプログラムを書こうとしています。複数のファイル名を引数として取り、各ファイルを順番にSTDOUTに書き込みたいのですが、私のプログラムは1つのファイルしか出力せずに終了します。
渡された最初のファイルだけでなく、すべてのファイルをコードで印刷するにはどうすればよいですか?
私は次のようなコードを実行しています:
haskell - 非決定論的にインターリーブするコンジットのソース
次のような型シグネチャを使用して、ソースの非決定論的なインターリーブ操作を見たいと思っていました
ユースケースは、ネットワーク上の多くのノードへのオープン接続を維持する p2p アプリケーションがあり、ほとんどの場合、それらのいずれかからのメッセージを待っているだけです。メッセージが到着すると、どこから来たかは気にしませんが、できるだけ早くメッセージを処理する必要があります。理論的には、この種のアプリケーション (少なくともソケットのようなソースに使用される場合) は、GHC の IO マネージャーを完全にバイパスしてselect
/ epoll
/etc を実行できます。直接呼び出しますが、機能する限り、実装方法は特に気にしません。
コンジットでこのようなことは可能ですか?一般的ではありませんが、おそらくより実現可能なアプローチは[(k, Socket)] -> Source m (k, ByteString)
、すべてのソケットでの受信を処理する関数を作成することです。
コンジットでの操作に気付きましたが、少なくともこの操作では、抽象化リークのように感じられるResumableSource
特定の を認識したいようです。Sink
haskell - 2 つのシンクを組み合わせるには、どのような方法が適していますか?
私はこれを使用zipSinks :: Monad m => Sink i m r -> Sink i m r' -> Sink i m (r, r')
しましたが、非推奨と見なされます。
haskell - http-conduit ソースを xml-conduit シンクに接続する
私がやりたいこととまったく同じように見えるので、このconnecting-http-conduit-to-xml-conduit stackoverflowの質問に従ってみました。
yesod bookのhttp-conduitセクションの例を元に作成しています。
コード
エラー
目標
xml-conduit Sink で使用される Source を返そうとしています。その目的は、XML-Conduit を使用して XML を解析し、それを Haskelldata
型として表現することです。エラーが発生する理由について説明を得ることができますか?
haskell - コンジット シンク内のネストされた ResourceT スコープ
runResourceT
単一の有効期間をスコープする方法はありSink
ますか?
Sink
潜在的に無限の数をラップするを構築しようとしていますSinks
。これはスレッドで問題なく動作しますが、スレッドなしで実行しようとしています。それは可能であるように思われます。のスコーピングが原因で障害にぶつかりましたrunResourceT
: リソース管理が粗すぎる (ただし機能的) か、きめが細かすぎる (完全に壊れている) ようになります。
haskell - 関数をコンジットシンクに持ち上げます
関数f :: ByteString -> String
があり、が必要Sink ByteString (ResourceT IO)
です。どうすればこれを入手できますか?
残念ながら、ドキュメントはあまり役に立ちませんでした...