问题标签 [haskell-pipes]

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 回答
262 浏览

haskell - 连接生产者和管道以提取结果

有一个类型的生产者Producer ByteString IO ()和一个类型的管道Pipe ByteString a IO ()我如何组成一个效果,这将在IO a运行时产生?

这是我最好的尝试:

它失败并显示以下内容:

0 投票
1 回答
796 浏览

haskell - Haskell:在不使用 spawn 的情况下拆分管道(广播)

这个问题有点 codegolf 和很多新手。

pipes在 Haskell 中使用了很棒的库,我想拆分管道以沿多个通道发送相同的数据(进行广播)。本Pipes.Concurrent教程建议使用spawn来创建邮箱,利用Output's monoid 状态。例如,我们可能会做这样的事情:

这种间接通过邮箱真的有必要吗?我们可以写这样的东西吗?

上面没有编译,因为Pipe没有Monoid实例。这有充分的理由吗?第一种方法真的是分割管道最干净的方法吗?

0 投票
1 回答
145 浏览

haskell - 如何将参数传递给外部导出函数到管道中?

我有一个

在每次调用此函数时,我希望将其参数传递到来自 haskell 管道库的一组管道中。

在调用之间,我不希望管道忘记最后 10 次调用的参数的最小值和最大值。

我该怎么做?

0 投票
2 回答
221 浏览

haskell - Pipes.Binary.decode - StateT 有什么用?

我正在尝试使用管道和构建在它上面的各种库来编写一个基本的网络服务器。预期的流程是:

从套接字获取字节串 -> 使用二进制解码 -> 服务器逻辑在这里 -> 向套接字发送响应

我认为会是这样的:

管道二进制有 adecode和 a decodeMany,但我不确定我是否理解其中的区别,也不知道如何使用decode. 为什么decodeMany将上游管道作为参数而不是与它挂钩>->?你如何使用decodeStateTfor 是什么,我的管道链最终应该是什么样子?

0 投票
2 回答
136 浏览

haskell - 管道 attoparsec 的类型检查问题

我一直在尝试管道-attoparsec,但运气不佳。

在相对简单的代码中(似乎是),似乎 Void 和 X 之间存在类型不匹配。从我在库中读到的内容(在某些时候这将成为类型同义词),我不确定如何解释类​​型错误。

测试代码:

这会导致错误:

0 投票
1 回答
218 浏览

haskell - 使用管道解析通过地图保留剩菜

我试图了解管道解析 3.0 如何处理除spanand之外的情况splitAt,但无法完全弄清楚如何让事情正常进行。基本思想是我有一个同构,我想映射所有输入值以从 type 转换A为 type B。然后,我希望将所有剩菜从转换BA. 我将如何做到这一点pipes-parse

为了比较,代码如下所示conduit

编辑:为了澄清,这是我上面代码的输出:

请注意,原始流的类型为A. 我们正在转换B并查看第一个元素,然后将接下来的 3 个元素作为 type A,然后将以下三个作为B,最后将其余的作为A

0 投票
5 回答
617 浏览

haskell - 将两个消费者加入一个返回多个值的消费者?

我一直在尝试新的管道 http 包,我有一个想法。我有两个用于网页的解析器,一个返回行项目,另一个返回页面其他地方的数字。当我抓取页面时,最好将这些解析器串在一起并从同一个字节串生产者同时获取它们的结果,而不是两次获取页面或将所有 html 提取到内存中并解析两次。

换句话说,假设您有两个消费者:

是否可以制作这样的功能:

我已经尝试了几件事,但我无法弄清楚。我知道如果不可能,但这会很方便。

编辑:

很抱歉,由于我对管道-attoparsec 的经验导致我提出了错误的问题,因此我对管道-attoparsec 做出了假设。当我假设它会返回一个管道使用者时,管道-attoparsec 将一个 attoparsec 转换为一个管道解析器。这意味着我实际上不能将两个 attoparsec 解析器转换为接受文本并返回结果的消费者,然后将它们与普通的旧管道生态系统一起使用。对不起,我只是不明白管道解析。

尽管这对我没有帮助,但 Arthur 的答案与我提出这个问题时所设想的差不多,而且我将来可能最终会使用他的解决方案。与此同时,我将使用导管。

0 投票
1 回答
182 浏览

haskell - 这是多用户网络服务器的合理架构吗?(管道并发引入了多少开销?)

我目前拥有它,因此有一个线程处理接受循环,一个主线程用于执行所有有状态逻辑的东西,然后每个连接的客户端有 2 个线程。一个客户端线程正在处理输入管道并使用管道并发将消息发送到主逻辑线程。另一个客户端线程处理输出管道,从主逻辑线程获取消息并将它们发送到客户端。

我这样做的理由是,主逻辑线程可以使用工作线程对不可变状态进行纯计算,然后一次完成所有状态更改并循环返回新状态。这样我就可以使用多个 CPU,而不必担心并发状态修改的问题。

STM/管道并发的开销是否足够小,以至于当我最终有几千个连接的客户端每秒发送两到三个消息时,这是一种合理的方法?

0 投票
1 回答
764 浏览

haskell - 如何将状态与管道一起使用?

我有一个 type 的函数Map Int String -> Proxy () a () Void IO b。现在它await是,用它得到的值做任何事情,然后重新调用它自己。我想将其更改为使用State (Map Int String),而不是将其作为参数传递,因此我可以只使用forever并且不需要让每个分支都记住递归。我知道我需要用来与另一个 monadStateT结合State,但我不明白该类型签名的StateT所属位置,或者我是否需要liftget. 既是 aState (Map Int String)又是 a 的函数的正确类型是Proxy () a () Void IO b什么?

0 投票
3 回答
274 浏览

haskell - 根据时间限制管道?

是否可以创建管道来获取在特定时间段内向下游发送的所有值?我正在实现一个服务器,其中协议允许我连接传出数据包并将它们压缩在一起,所以我想ByteString每 100 毫秒有效地“清空”下游 s的队列,mappend然后它们一起产生到下一个管道进行压缩。