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

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

haskell - Haskell に欠落しているデータ コンストラクター HostAny

Conduit Network を試していますが、データ コンストラクターが見つからないため、このコードをコンパイルできません: HostAny

コンジット-エクストラがインストールされているので、なぜそれが見つからないのか非常に困惑していますか?

GHCエラーは次のとおりです。

pez@devbox:~/dev$ runhaskell server.hs

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

sockets - ResourceT を使用してリソースをクリーンアップする正しい方法は何ですか?

の UNIX パッケージをいじってみました。これは基本的に、UNIX ドメイン ソケットを使用して、特にfuncitonconduit-extraを使用してサーバーを簡単に作成できるようにします。runUnixServer

問題は、関数が存在した後、ソケット ファイルをクリーンアップしないことです。つまり、手動でクリーンアップする必要があります。基本的にエコーサーバーを作成する簡単な例を次に示します。

少しグーグルで調べたところ、ここでリソースを処理する正しい方法はresourcetパッケージを使用することであることがわかりました。問題は、リソース内のほとんどの API がリソースを自分で割り当てることを期待していることですが、runUnixSever何も返さない の場合はそうではありません。

register最初は、を使用して、次のようなファイルを削除する関数を登録できると思いました

ただし、少なくともドキュメントに記載されている限り、このアプローチには問題がありallocateます。

これは、割り当てを呼び出してから解放アクションを登録するのとほぼ同じですが、非同期例外のマスキングを適切に処理します。

これはregister、それ自体では非同期例外を処理しないということですか? もしそうなら、それによって生成されたハンドラーの1つがrunUnixServerエラーを発生させたときに問題になる可能性がありますか?

私が思いついた 3 番目の最終的な解決策はallocate、非同期例外が適切に処理されるようにするために を使用することです (この場合、それが本当に必要かどうかはわかりません)。

しかし、これは本当に最善の解決策でしょうか? 私は決して使用しない値を作成しているので、ファイナライザーでその値を無視する関数を(return 1)使用しています。const

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

haskell - ConduitM のインスタンス MonadIO がありませんか?

ドキュメンテーションによると、基になる Monad にインスタンス ( )MonadIOがある場合、ConduitM のインスタンスがあります。MonadIOMonadIO m => MonadIO (ConduitM i o m)

なぜこれを行うのですか:

これで失敗します:

'liftIO' の使用から生じる (MonadIO (ConduitM Int Data.Void.Void IO)) のインスタンスはありません '(.)' の最初の引数、つまり 'liftIO' '(>>=) の 2 番目の引数'、つまり '(liftIO . print)' '($$)' の 2 番目の引数で、つまり 'await >>= (liftIO . print)'</p>

ここで何が欠けていますか?


確認したところ、明らかにトランス0.22とトランス0.3の両方があり、それが原因である可能性があります。

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

haskell - コンジットを実行した後に値を取得するにはどうすればよいですか?

さらにパイプラインを開始する前に、クライアントとの間で少し行ったり来たりして、Client オブジェクトまたはその名前文字列を取得する必要があります。

しかし、私は appSink に戻り値を持たせることができないようです。

どうすればいいですか?

アップデート

これが私が最終的に得た解決策です:

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

haskell - コンジットを条件付きで適用するにはどうすればよいですか?

type の Conduit と typeConduit a m aの function があり(a -> Maybe a)ます。関数を実行して、Nothing が返された場合は、Conduit を使用します。つまり、タイプの関数が必要です

または、より制限されたタイプの

それが役立つ場合、私の特定のケースは次のとおりです。

IRC メッセージを処理するコードを書いており、関数があります。

その関数で (または同等の)ことができるようにしたいmaybePipe handlePings pipeので、IRC メッセージが ping の場合、pong で応答し、ユーザー指定の Conduit を呼び出しません。

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

haskell - コンジット上にライブラリを設計するには

現在、一種のイーサネット パケット処理ライブラリを開発しています。基本的な考え方は、パケットにはネットワーク インターフェイスと pcap ダンプ ファイルの 2 つの異なるソースがあるということです。パケットはフローごとにグループ化する必要があり、フローはフィルタリングする必要があり、UDP フローはある方法で処理し、TCP は別の方法で処理する必要があります。コンジットなしでバージョンを開発しましたが、現在、重複するコードが多すぎることがわかりました。私は抽象化しようとしていますが、コンジットに似たものを発明しています。それで、コンジットに切り替えようとしましたが、行き詰まりました。

したがって、写真は次のようになります。

最初の問題はフロー マップです。フローを蓄積する必要があり、フローにあるしきい値よりも多くのパケットがある場合は、それを処理に渡します。

2 つ目の問題は、UDP と TCP の処理に別のパイプを使用したいので、パイプを何らかの方法で分割する必要があることです。

そして、このすべてのものをマルチスレッド化する必要があるという別の問題があるため、プロデューサーとコンシューマーは異なるスレッドにある必要があります。

では、この図では、コンジットに関して何をすべきでしょうか?

ソースはソースです、それは明らかです。しかし、フロー マップはどうあるべきでしょうか。さらに処理するためのソースを生成するシンク? フローの数は膨大であるため、さらに処理する前にすべてのパケットをメモリに蓄積することは避けなければなりません。

何か案は?繰り返しになりますが、これらすべてをコンジットなしで行う方法は非常に明確なので、コンジットを使用して適切に設計する方法が問題になります。

アップデート。

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

haskell - 入力ファイルから状態を持つコンジットにストリーミングする方法

コンジットを使用してファイルから読み取り、それをトークナイザーにストリーミングしたいと考えています。原因は、同じ一連の文字でも、以前の入力に応じて異なるトークンが生成される可能性があることです。

では、どうすればたくさんのものをState単一の中間で処理できますか?ConduitIO

書き込むだけConduit Char (State TokenizerStateType) Tokenで、間違ったタイプのエラーがいくつか発生します (IO が必要で、State がエラーのタイプを取得しました)。

私は自分のコンピューターにいないので、動作しない最小限の例を提供することはできませんが、ghc が利用可能になり次第、追加します。