问题标签 [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 投票
4 回答
1203 浏览

haskell - 如何使用 WAI(原始请求正文)使用管道

我正在使用 scotty,它是 WAI 的一个类似 sinatra 的包装器。我想将原始请求正文作为字节字符串获取,以便可以将其解析为 json。以下是接近的。这类似于其他关于使用 WAI 使用 body 的问题,但不同的是因为我希望 body 作为字节串,并且因为我在不同的 monad 中,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

0 投票
1 回答
682 浏览

haskell - 如何将 Sink 变成 Conduit?

我正在尝试Conduit使用attoparsec解析器编写一个。具体来说,给定parseOne :: Parser T,我想构造一个Conduit ByteString m T重复地将解析器应用于输入并流式传输结果的方法。

attoparsec-conduit提议sinkParser将 aParser变成 a Sink,但我怎样才能将其Sink变成 a Conduit?我正在寻找的是一个类似的功能:

它反复将数据输入到 中Sink,同时产生每个结果。看起来它可以很容易地编写为手动循环,但我想知道是否有更好的方法。

管道库中缺少这个看似显而易见的功能让我觉得我可能做错了什么;有没有更好的方法来做到这一点?用例是将原始字节转换为基于消息的网络协议的解析形式,以供管道的后续阶段处理。Conduit T m ByteString多亏了blaze-builder-conduit ,我已经有了相反的方向(即) ,所以这似乎是构建事物的最自然的方式。

0 投票
1 回答
285 浏览

haskell - 从 Network.HTTP.Enumerator 迁移到 Network.HTTP.Conduit

我不知道为什么我的代码会中断。起初我以为是因为parseURL[]. requestHeaders好的,所以也许我只需要告诉它 resquestHeaders 应该是什么。好吧,我检查了requestHeaders从我的旧的工作代码生成的。它也返回一个[]. 所以现在我没有想法了。下面是旧的工作代码,遵循我在 GHCi 中尝试使用的新的基于管道的库的东西。

以上工作正常,这是我在迁移时一直在尝试做的事情,以及我收到的错误。

如您所见,它几乎是完全相同的代码。因此,我想就发生的变化以及我应该更仔细地研究的内容提供反馈。另外,如何检查在客户端代码和服务器之间来回发送的 http 标头?

0 投票
1 回答
352 浏览

haskell - 如何在管道haskell中添加新源

我在使用以下代码时遇到问题network-conduit

在有问题的地方我想写一些类似的东西

(>>>=)函数将mySource输出推送到下一级 并将(<<<=)函数发送回上一级

0 投票
1 回答
717 浏览

haskell - 将 http-conduit 连接到 xml-conduit

我正在努力通过 xml-conduit 将响应从 http-conduit 转换为 XML 文档。

doPost函数接受一个 XML 文档并将其发布到服务器。服务器使用 XML 文档进行响应。

以下工作并返回“200”:

但是,当我尝试使用 xml-conduit 解析响应正文时,我遇到了问题:

产生的编译错误是:

我尝试使用 $= 和 $$ 将源从 http-conduit 连接到 xml-conduit,但没有任何成功。

有没有人有任何提示可以指出我正确的方向?提前致谢。

尼尔

0 投票
1 回答
270 浏览

haskell - 使用长寿命资源(文件句柄)扭曲 Web 服务

我试图了解如何使用 warp 编写 Web 服务,该服务具有我希望从我的所有请求中访问的长期资源(即我希望资源在服务器的整个生命周期内都存在,而不是每个请求都存在)。我假设这是 ResourceT 的用途,但我不确定我实际上是如何做到这一点的。

我的特殊用途是我想公开一个文件句柄,我目前已经将它包裹在状态单子中。如果在使用 warp 和 ResourceT 时这没有意义,我很高兴改变这种方法。此代码的早期版本可以在代码审查中看到:https ://codereview.stackexchange.com/questions/9177/my-simple-haskell-key-value-file-store

提前致谢,

马特

0 投票
2 回答
3192 浏览

haskell - 枚举器与导管与管道的优缺点是什么?

我想听听比我自己更深入了解EnumeratorsConduitsPipes之间的根本区别以及主要优点和缺点的人。一些讨论已经 在进行中,但如果有一个高层次的概述会很好。

0 投票
2 回答
785 浏览

haskell - 使用 ResourceT 解决问题

我正在调整这个例子,特别是客户端。我会告诉你我认为问题是什么,遵循代码和它产生的错误。

这是问题所在,错误说没有 Control.Monad.Trans.Class.MonadTrans ResourceT 的实例

但我认为有,由于这个文档。那么哪里出了问题?

如下所述,有一些 janke 正在发生Control.Monad.Trans.Resource

这是ResourceT自省的结果。

版本resourcet

关于如何进行的任何想法?MonadTrans ResourceT 的实例在哪里?

0 投票
1 回答
337 浏览

haskell - wai 的意外管道行为

我正在尝试使用 wai 编写一个非常微不足道的“回声”网络应用程序;我想要它做的就是回复发布给它的数据(我真的不关心该方法,但我正在使用 curl 并且 curl 正在使用 POST,所以这就是我想要的)。我的微不足道的网络服务器是这样的:

我期望这样做基本上是将请求正文与响应正文联系起来,这样当我运行curl --data @/usr/share/dict/words localhost:3000; 它会向我吐出我的话。相反,它给出了一个空的身体。使用“-v”运行 curl 表明我的应用正在回复“200 OK”并且没有数据。我不确定我在这里做错了什么。

如果我用这个替换应用程序功能:

并添加一个 OverloadedStrings 杂注以允许“Hello World”部分工作,然后我确实看到我的应用程序将整个请求正文打印到标准输出,所以我知道 curl 正在正确提交数据。我还将“Hello World”打印到 curl 标准输出,所以我知道 curl 按我的预期工作。在将 requestBody 绑定到 ResponseSource 的地方,我一定做错了,但我没有看到。

0 投票
1 回答
545 浏览

haskell - 如何在管道中使用导管下降功能?

我有一个简单的任务——从一个文件中读取一堆行并对每一行做一些事情。除了第一个 - 这是一些被忽略的标题。

所以我想我会尝试管道。

凉爽的。

所以现在我只想删除第一行......而且似乎有一个功能 -

嗯-但现在我注意到 drop 具有类型签名Sink a m ()。有人建议我可以将 Monad 实例用于管道并使用 drop 有效地删除一些元素 - 所以我尝试了这个:

哪个不进行类型检查,因为管道的 monad 实例仅适用于相同类型的管道 - 接收器的输出为 Void,所以我不能这样使用它。

我快速浏览了管道和管道核心,我注意到管道核心具有我预期的功能,管道是一个最小的库,但文档显示了它是如何实现的。

所以我很困惑-也许我缺少一个关键概念..我看到了这个功能

但这似乎不是正确的想法,因为输出值为 ()

我可能会回去使用lazy-io,因为我真的不需要任何流媒体——但我很想看看正确的方法。