问题标签 [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(原始请求正文)使用管道
我正在使用 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
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 ,我已经有了相反的方向(即) ,所以这似乎是构建事物的最自然的方式。
haskell - 从 Network.HTTP.Enumerator 迁移到 Network.HTTP.Conduit
我不知道为什么我的代码会中断。起初我以为是因为parseURL
给[]
. requestHeaders
好的,所以也许我只需要告诉它 resquestHeaders 应该是什么。好吧,我检查了requestHeaders
从我的旧的工作代码生成的。它也返回一个[]
. 所以现在我没有想法了。下面是旧的工作代码,遵循我在 GHCi 中尝试使用的新的基于管道的库的东西。
以上工作正常,这是我在迁移时一直在尝试做的事情,以及我收到的错误。
如您所见,它几乎是完全相同的代码。因此,我想就发生的变化以及我应该更仔细地研究的内容提供反馈。另外,如何检查在客户端代码和服务器之间来回发送的 http 标头?
haskell - 将 http-conduit 连接到 xml-conduit
我正在努力通过 xml-conduit 将响应从 http-conduit 转换为 XML 文档。
该doPost
函数接受一个 XML 文档并将其发布到服务器。服务器使用 XML 文档进行响应。
以下工作并返回“200”:
但是,当我尝试使用 xml-conduit 解析响应正文时,我遇到了问题:
产生的编译错误是:
我尝试使用 $= 和 $$ 将源从 http-conduit 连接到 xml-conduit,但没有任何成功。
有没有人有任何提示可以指出我正确的方向?提前致谢。
尼尔
haskell - 使用长寿命资源(文件句柄)扭曲 Web 服务
我试图了解如何使用 warp 编写 Web 服务,该服务具有我希望从我的所有请求中访问的长期资源(即我希望资源在服务器的整个生命周期内都存在,而不是每个请求都存在)。我假设这是 ResourceT 的用途,但我不确定我实际上是如何做到这一点的。
我的特殊用途是我想公开一个文件句柄,我目前已经将它包裹在状态单子中。如果在使用 warp 和 ResourceT 时这没有意义,我很高兴改变这种方法。此代码的早期版本可以在代码审查中看到:https ://codereview.stackexchange.com/questions/9177/my-simple-haskell-key-value-file-store
提前致谢,
马特
haskell - 枚举器与导管与管道的优缺点是什么?
我想听听比我自己更深入了解Enumerators、Conduits和Pipes之间的根本区别以及主要优点和缺点的人。一些讨论已经 在进行中,但如果有一个高层次的概述会很好。
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 的地方,我一定做错了,但我没有看到。
haskell - 如何在管道中使用导管下降功能?
我有一个简单的任务——从一个文件中读取一堆行并对每一行做一些事情。除了第一个 - 这是一些被忽略的标题。
所以我想我会尝试管道。
凉爽的。
所以现在我只想删除第一行......而且似乎有一个功能 -
嗯-但现在我注意到 drop 具有类型签名Sink a m ()
。有人建议我可以将 Monad 实例用于管道并使用 drop 有效地删除一些元素 - 所以我尝试了这个:
哪个不进行类型检查,因为管道的 monad 实例仅适用于相同类型的管道 - 接收器的输出为 Void,所以我不能这样使用它。
我快速浏览了管道和管道核心,我注意到管道核心具有我预期的功能,管道是一个最小的库,但文档显示了它是如何实现的。
所以我很困惑-也许我缺少一个关键概念..我看到了这个功能
但这似乎不是正确的想法,因为输出值为 ()
我可能会回去使用lazy-io,因为我真的不需要任何流媒体——但我很想看看正确的方法。