问题标签 [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 回答
815 浏览

xml - 使用 xml-conduit 的脆弱和冗长的代码

我使用XML-conduit构建了一个 GPX 解析器,并且遇到了用于识别元素和跳过不需要的标签的代码过于冗长和脆弱的问题。

识别元素(一个小烦恼)

我通过仅比较nameLocalNames 来明确忽略名称空间。我想正确的方法是将正确的命名空间硬编码到程序中,并让一个助手构造我的元素名称以便在tag*函数中进行比较?这有点烦人,因为我必须支持至少两个不同的名称空间(GPX 1.1 和 1.0),它们非常相似,以至于我的使用不需要更改代码。

跳过元素

GPX 较大,自定义扩展集较大。因为我正在构建的工具需要有限的信息,所以我决定忽略特定标签及其所有子元素。例如:

为了忽略extensions带有大量子元素的类似标签,我制作了一个接收器,它会消耗元素直到结束元素Event

似乎应该有一个tag*变体可以为我做到这一点(在没有消耗所有孩子的情况下成功)但是没有表明我缺少一个简单的组合器或应该发送一个补丁的事实 - 是它吗?

0 投票
3 回答
1259 浏览

haskell - 如何使用管道对从文件中读取的行进行编号?

我是一名 Haskell 初学者,试图将我的头绕在导管库上。

我试过这样的东西,但它没有编译:

看来,conduitState 中的状态必须与管道的输入类型属于同一类型。或者至少这是我从错误消息中理解的:

如何使用管道来做到这一点?我想从文件中读取行并将行号附加到每一行。

0 投票
1 回答
539 浏览

haskell - 从管道教程编译代码

我正在尝试理解来自http://www.yesodweb.com/book/conduits的代码。经过一些修复(例如替换ResourceMonadResource)后,它仍然无法编译:

给我以下错误:

我正在使用 GHC 7.4.1 和导管 0.4.2。

PS 是否有任何教程没有损坏/是用导管 0.4 编写的?

0 投票
1 回答
218 浏览

haskell - 带导管的源中的无限循环

我决定尝试处理管道,我认为我做得很好,但是当我尝试使用管道 4 制作这个简单的源时,我得到一个无限循环,我不明白为什么。这是简化的,原始版本会创建一个临时文件名并通过 yield 返回它。这只是返回一个()。

如果我运行:

我得到一个无限循环。为什么它不只运行五次并给我一个包含五个 () 的列表?

0 投票
4 回答
3056 浏览

haskell - 如何在 Haskell 中实现`cat`?

我正在尝试cat在 Haskell 中编写一个简单的程序。我想将多个文件名作为参数,并将每个文件顺序写入STDOUT,但我的程序只打印一个文件并退出。

我需要做什么才能让我的代码打印每个文件,而不仅仅是传入的第一个文件?

我正在运行这样的代码:

0 投票
2 回答
349 浏览

haskell - 非确定性交错管道的来源

我希望看到源的不确定性交错操作,其类型签名如

用例是我有一个 p2p 应用程序,它维护与网络上许多节点的开放连接,并且它主要只是坐在那里等待来自其中任何一个节点的消息。当消息到达时,它并不关心它来自哪里,而是需要尽快处理该消息。从理论上讲,这种应用程序(至少在用于类似套接字的源时)可以完全绕过 GHC 的 IO 管理器并运行select/ epoll/etc。直接调用,但我并不特别关心它是如何实现的,只要它有效。

使用导管可以实现这样的事情吗?一种不太通用但可能更可行的方法可能是编写一个[(k, Socket)] -> Source m (k, ByteString)函数来为您处理所有套接字上的接收。

我注意到了ResumableSource管道中的操作,但他们似乎都想知道一个特定的Sink,这感觉有点像抽象泄漏,至少对于这个操作来说是这样。

0 投票
2 回答
994 浏览

haskell - What is the preferred way to combine two sinks?

I've used zipSinks :: Monad m => Sink i m r -> Sink i m r' -> Sink i m (r, r') for this but it is considered deprecated.

0 投票
0 回答
301 浏览

haskell - 将 http-conduit 源连接到 xml-conduit 接收器

我试图遵循这个connecting-http-conduit-to-xml-conduit stackoverflow 问题,因为它看起来与我想要做的完全一样。

我正在构建来自 yesod 书的http-conduit部分的示例。

编码

错误

目标

我正在尝试返回一个将由 xml-conduit Sink 使用的 Source,其目的是我想使用 XML-Conduit 来解析 XML 并将其表示为 Haskelldata类型。我能否解释一下我为什么会出错?

0 投票
1 回答
313 浏览

haskell - 管道 Sink 内的嵌套 ResourceT 范围

有没有办法runResourceT限制一个单一的生命周期Sink

我正在尝试构建一个Sink包装可能无限数量的Sinks. 这适用于线程,但我试图在没有线程的情况下做到这一点。似乎应该是可能的。由于范围界定,我遇到了障碍runResourceT:我的资源管理粒度太粗(但功能齐全)或太细(完全损坏)。

0 投票
2 回答
453 浏览

haskell - 将功能提升到 Conduit Sink

我有一个函数f :: ByteString -> String,需要一个Sink ByteString (ResourceT IO). 我怎么得到这个?

不幸的是,这些文档不是很有帮助......