問題タブ [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 - WAI(生のリクエストボディ)でコンジットを消費する方法
私は、WAIのシナトラのようなラッパーであるscottyを使用しています。生のリクエスト本文をバイト文字列として取得して、jsonとして解析できるようにします。以下は近いです。これは、WAIを使用してボディを消費することに関する他の質問と似ていますが、ボディをバイト文字列として使用する必要があるため、および別のモナドであるActionMにいるため、異なります。
明らかにうまくいきません。なんらかのリフトか何かが必要だと思いますが、何を使うべきかわかりません。liftIO
正しくありません、そしてlift
私に奇妙なエラーを与えます。
http://hackage.haskell.org/packages/archive/scotty/0.0.1/doc/html/Web-Scotty.html
http://hackage.haskell.org/packages/archive/wai/latest/doc/html/Network-Wai.html
haskell - シンクをコンジットに変えるにはどうすればよいですか?
attoparsecパーサーConduit
を使用してを作成しようとしています。具体的には、を与えられて、パーサーを入力に繰り返し適用し、結果をストリーミングするを構築したいと思います。parseOne :: Parser T
Conduit ByteString m T
attoparsec-conduitは、をに変換sinkParser
することを提案しますが、どうすればこれをに変換できますか?私が探しているのは、次のような関数です。Parser
Sink
Sink
Conduit
これは、データをに繰り返しフィードしSink
、各結果を生成します。手動ループとしてはかなり簡単に書けるようですが、もっと良い方法があるのではないかと思います。
コンジットライブラリにこの一見明らかな機能がないため、私は何か間違ったことをしているのではないかと思います。これを達成するためのより良い方法はありますか?ユースケースは、生のバイトをメッセージベースのネットワークプロトコルの解析された形式に変換し、パイプラインの後の段階で処理することです。blaze-builder-conduitのConduit T m ByteString
おかげで、私はすでに反対の方向(つまり)を持っているので、これは物事を構造化する最も自然な方法のように思えました。
haskell - Network.HTTP.EnumeratorからNetwork.HTTP.Conduitへの移行
コードが壊れた理由がわかりません。parseURL
最初は、を与えるからだと思い[]
ましたrequestHeaders
。さて、多分私はそれにresquestHeadersがどうあるべきかを伝える必要があります。requestHeaders
さて、私は私の古い、動作しているコードから生成されたものを調べました。それも、を返します[]
。だから今、私はアイデアがありません。以下は、古い動作コードであり、GHCiで新しいコンジットベースのライブラリを使用して試したものに従います。
上記は正常に機能します。これが、移行中に実行しようとしたことと、表示されるエラーです。
ご覧のとおり、これはほぼ同じコードです。ですから、何が変わったのか、そして何をもっと詳しく見ていくべきかについてのフィードバックをお願いします。また、クライアントコードとサーバーの間で送受信されるhttpヘッダーを確認するにはどうすればよいですか?
haskell - http-conduitをxml-conduitに接続する
http-conduitからxml-conduitを介して応答をXMLドキュメントに変換するのに苦労しています。
このdoPost
関数はXMLドキュメントを取得し、サーバーに送信します。サーバーはXMLドキュメントで応答します。
以下は機能し、「200」を返します。
ただし、xml-conduitを使用して応答本文を解析しようとすると、次の問題が発生します。
結果として生じるコンパイルエラーは次のとおりです。
$ =と$$を使用してhttp-conduitからxml-conduitにソースを接続しようとしましたが、成功しません。
誰かが私を正しい方向に向けるためのヒントがありますか?前もって感謝します。
ニール
haskell - 有効期間の長いリソース (ファイル ハンドル) を使用して Web サービスをワープする
すべてのリクエストからアクセスしたい長寿命のリソースを持つワープを使用してWebサービスを作成する方法を理解しようとしています(つまり、リクエストごとではなく、サーバーの存続期間中リソースが存在するようにしたい)。これは ResourceT の使用であると想定していますが、実際にこれをどのように行うかはわかりません。
私の特定の用途は、現在状態モナドにラップされているファイルハンドルを公開したいということです。warp と ResourceT を使用するときにこれが意味をなさない場合は、喜んでこのアプローチを変更します。このコードの初期バージョンは、コード レビューで確認できます: https://codereview.stackexchange.com/questions/9177/my-simple-haskell-key-value-file-store
前もって感謝します、
マット
haskell - 列挙子とコンジットとパイプの長所と短所は何ですか?
Enumerators、Conduits、およびPipesの基本的な違いと、主な利点と欠点について、自分よりも深く理解している人から聞きたいです。一部の議論はすでに 進行中ですが、大まかな概要を把握できれば幸いです。
haskell - ResourceT で問題を解決する
この例、特にクライアントを適応させています。コードとそれが生成するエラーに従って、問題が何であると私が思うかをお話しします。
ここに問題があります。エラーは Control.Monad.Trans.Class.MonadTrans ResourceT のインスタンスがないことを示しています
しかし、このドキュメントのおかげで、あると思います。では、どこで問題が発生したのでしょうか。
以下で述べたように、何かジャンクが起こっていますControl.Monad.Trans.Resource
ResourceT
イントロスペクションの結果がこちら。
のバージョンresourcet
は
続行する方法についてのアイデアはありますか?MonadTrans ResourceT のインスタンスはどこにありますか?
haskell - wai での予期しないコンジットの動作
wai を使用して、非常に単純な「エコー」Web アプリケーションを作成しようとしています。私がやりたいのは、POST されたデータを返信することだけです (メソッドは本当に気にしませんが、curl を使用しており、curl は POST を使用しているので、それが目的です)。私の簡単なWebサーバーはこれです:
私が期待していたのは、基本的にリクエストボディをレスポンスボディに結びつけることcurl --data @/usr/share/dict/words localhost:3000
です。それは私の単語ファイルを私に吐き返します。代わりに、空の本体が返されます。「-v」を指定して curl を実行すると、アプリが「200 OK」とデータなしで応答していることがわかります。ここで何が間違っているのかわかりません。
アプリケーション関数を次のように置き換えると:
OverloadedStrings プラグマを追加して「Hello World」部分が機能するようにすると、アプリがリクエスト本文全体を stdout に出力するので、curl がデータを適切に送信していることがわかります。また、curl stdout に「Hello World」が出力されるので、curl が期待どおりに機能することがわかります。requestBody を ResponseSource に結び付けているところで何か間違ったことをしているに違いありませんが、表示されません。
haskell - パイプラインでコンジット ドロップ機能を使用するには?
私は簡単な仕事をしています - ファイルからたくさんの行を読み込んで、それらのそれぞれで何かをします。最初のものを除いて - これは無視されるべきいくつかの見出しです.
そこで、コンジットを試してみようと思いました。
涼しい。
だから今、最初の行を削除したいだけです...そしてそのための機能があるようです-
うーん - しかし今、私は drop が署名型を持っていることに気付きSink a m ()
ました。パイプに Monad インスタンスを使用し、ドロップを使用していくつかの要素を効果的にドロップできると誰かが提案したので、これを試しました:
パイプのモナドインスタンスは同じタイプのパイプにのみ適用されるため、タイプチェックは行われません-シンクは出力として Void を持っているため、このようには使用できません。
pipes と pipes-core をざっと見てみると、pipes-core には期待どおりの機能があることがわかりました。pipes は最小限のライブラリですが、ドキュメントには実装方法が示されています。
だから私は混乱しています - 私が見逃している重要な概念があるかもしれません..関数を見ました
しかし、出力値が () であるため、それは正しい考えではないようです。
ストリーミングは本当に必要ないので、おそらく戻ってlazy-ioを使用しますが、それを行う適切な方法を知りたいです。
xml - xml-conduit を使用した脆弱で冗長なコード
私はXML コンジットを使用して GPX パーサーを構築しましたが、要素を識別して不要なタグをスキップするための過度に冗長で脆弱なコードに問題がありました。
要素の識別 (マイナーな煩わしさ)
sのみを比較して、名前空間を明示的に無視していnameLocalName
ます。tag*
正しい名前空間をプログラムにハードコードし、関数で比較するためにヘルパーに要素名を作成させるのが正しい方法だと思いますか? これは、少なくとも 2 つの異なる名前空間 (GPX 1.1 と 1.0) をサポートする必要があるため、少し面倒です。これらの名前空間は十分に類似しているため、コードを変更する必要はありません。
スキップ要素
GPX は大きく、カスタム拡張機能のセットはより大きくなります。私が構築しているツールは限られた情報しか必要としないため、特定のタグとそのすべてのサブ要素を無視することにしました。例えば:
多数のサブ要素を持つ類似のタグを無視するためextensions
に、最後の要素まで要素を消費するシンクを作成しましたEvent
。
私のためにこれを行うバリアントがあるはずtag*
です(すべての子が消費されることなく成功します)が、単純なコンビネーターが不足しているか、パッチを送信する必要があることを示唆していないという事実はありますか?