問題タブ [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.
haskell - コンジット: 複数のストリーム コンシューマ
コーパス内の NGram の頻度をカウントするプログラムを作成します。トークンのストリームを消費し、1 つのオーダーの NGrams を生成する関数が既にあります。
現時点では、1 つのストリーム コンシューマーをストリーム ソースに接続できます。
複数のストリーム コンシューマーを同じストリーム ソースに接続するにはどうすればよいですか? 私はこのようなものが欲しいです:
プラスは、各コンシューマーを並行して実行することです
編集: Petrのおかげで、この解決策を思いつきました
haskell - HTTP コンジットを使用するときに、考えられるすべてのエラーをきれいに処理するにはどうすればよいですか?
次のようなコードがあります。
問題は、HttpException のコンストラクターが他にもたくさんあることです。エラーが正確に何であるかに関係なく、通常は再試行を続けたいと思います。次に置き換えるResponseTimeout
と_
、例外のタイプを推測できないため、コンパイル エラーが発生します。
例外ハンドラにも型シグネチャを提供したくありません。
あまり重複していないことはわかってい_
ますが、「例外が ResponseTimeout の場合は x を実行し、例外がそれ以外の場合はまったく同じことを実行する」と言っているようなものなので、ケースを追加するのは間違っていると感じます。ワイルドカードを使用する簡潔な方法はありますが、それがどのタイプであるかをコンパイラに知らせますか?
haskell - パイプを使用してストリームのサブセットを折りたたむ 4.0
パイプ 4.0 を理解しようとしていて、いくつかのコンジット コードを変換したいと考えています。s のストリームがありInt
、最初の 5 つをスキップして、次の 5 つの合計を取得したいとします。単純なリストを使用すると、次のようになります。
コンジットでは、これは次のようになります。
または完全なプログラムとして:
ただし、パイプでこれを行う方法はよくわかりません。
windows - Windows 8 で「InternalIOException getAddrInfo: 存在しません (エラー 10093)」
なぜこんな単純なコードが動かないのでしょうか?
次のエラーが発生します。
TestConduit.exe: InternalIOException getAddrInfo: 存在しません (エラー 10093)
haskell - コンジットを使用した動的ソース
IORef [a]
またはの内部など、並列スレッドで常に成長しているリストがありますMVar [a]
。スレッドが出るまでも並行して流したい。これをどのように実装すればよいですか?次のようになります。
それとも、リストを成長させずに、スレッド内で生成されたすべてのチャンクを次々とシンクするより良い方法があるでしょうか?
haskell - takeWhile のようなコンジットを作成する方法はありますが、最大で特定のバイト数しか使用できません。
takeWhile
との間のクロスのようなコンジットを作成しようとしていisolate
ます。つまり、述語が保持されなくなるか、バイト制限に達するまで、入力から消費し、出力に譲ります。型シグネチャが
その使用例として:
私はそれを期待しています
ただし、 の最も単純な定義は次のisolateWhile
とおりです。
収量
つまり、はを残して破棄し、をisolate
すべて使い果たします。このデータ損失は、アプリケーションにとって望ましくありません。ただし、2 番目のケースが期待どおりの結果をもたらすことは注目に値します。Hello
He
takeWhile
llo
=$=
そのようなオペランドを交換すると:
それで
これで、最初のテストは修正されましたが、2 番目のテストは壊れました。今回は、takeWhile
必要なものは何でもisolate
取り、そのサブセットを取ります。しかし、takeWhile
使用しisolate
ないものは破棄され、これは望ましくありません。
最後に、私は試しました:
これは実際に機能します!受け入れるものisolate
と受け入れtakeWhile
ないものはすべて によって消費されCL.consume
、 でストリームに戻されますleftover
。残念ながら、これは恐ろしいクラッジのように思えlimit
ますleftover
. それは無駄のようです。
私が考えることができる唯一の解決策は、プリミティブの観点からawait
それyield
を書くleftover
ことです。これにより、多くの問題を無駄にすることなくすべての問題が解決されますが、もっと良い方法があるはずです。takeWhile
isolate
私は何かを見逃していますか、それともこれを書くより良い方法は本当にありませんか?
exception - aeson / attoparsec を使用したコンジット、ソースにデータがなくなったら例外なくきれいに終了する方法
ファイル/ウェブサーバーからのJSONデータを解析するためにaeson
/attoparsec
およびconduit
/conduit-http
接続を使用しています。conduit-attoparsec
私の問題は、パイプラインが常にこの例外をスローすることです...
...ソケットが閉じられるか、EOF に達すると。パイプラインなどを介して結果のデータ構造を解析して渡すことは問題なく機能しますが、常にsinkParser
この例外をスローして終了します。私はこのようにそれを呼び出します...
...ByteStrings をメッセージ構造に解析するコンジットの内部。
データがなくなったら (トップレベルの式がなくなったら)、パイプラインをきれいに終了させるにはどうすればよいですか? エラー文字列を見なくても、この例外を検出/区別する適切な方法はありますか?
ありがとう!
編集: 例:
サンプル入力 (input.json):
出力:
と out.txt: