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

haskell - 在管道内运行单态消费者

已经问过如何Consumer在 aPipeConsumer'中运行 a 的问题,但随后提供的答案需要多态类型同义词:

现在,我遇到的问题是 in Pipes.VectortoVector使用单态Consumer同义词:

因此toPipe,该答案中的功能在这种情况下将不起作用:

有什么建议么?toVector也许是不必要地狭窄的签名?(我是一个太多的管道菜鸟来告诉... 编辑:我尝试将签名更改pipes-vectorConsumer'; 代码编译,但它看起来vectorPipe永远不会产生。)

0 投票
1 回答
158 浏览

json - 使用 Haskell 对一个巨大的 json 数组进行二次采样

我有一个巨大的 Json 文件,我想避免完全加载到内存中。它的结构非常简单:它由一个包含任意元素的大数组组成。我只是想通过随机删除大部分元素来转换数组,并简单地输出转换后的 Json。

Haskell 似乎很适合这个懒惰的问题,我认为它会是一个很好的 Haskell 练习(我不是专家,我不太了解 FP 理论)。

我发现 pipe-aeson [1] 这似乎是我想要的,但在尝试了一段时间后,我不得不承认我被卡住了。几乎没有示例,虽然我可以使用 Pipes 对数据进行下采样,但使用 Parser 对象似乎更复杂。我发现的选项 (evalStateT) 是严格的,并且会解析整个事情,而不会让我干预。

也许镜头可以解决我的问题,但它们非常抽象,我不知道它们是什么,也不知道如何使用它们。

比我更有知识的人可以提供一些指导吗?

[1] https://hackage.haskell.org/package/pipes-aeson-0.4.1.3/docs/Pipes-Aeson.html#t:DecodingError

0 投票
1 回答
141 浏览

haskell - 为什么管道定义内部功能

我正在查看管道库源代码,例如在核心模块中,我不明白为什么作者到处使用这样定义函数的模式:

或者:

或者:

这是启用某些优化的技巧吗?我觉得它很难看,如果它是一些优化技巧,我真的希望编译器可以在没有这样的事情的情况下做到这一点。但也许还有其他原因?

0 投票
1 回答
367 浏览

haskell - 在 Haskell 中使用 Pipes 读写二进制数据

我正在尝试在常量内存中读写很多整数。我已经弄清楚如何将整数写入内存,但还没有弄清楚如何将它们读回。

我从Pipes.Binary的文档中获得了解码器功能。但是drawAll,根据文档 drawAll,它使用的不是管道的惯用用法,而是出于测试目的而提供的。

我的问题是如何修改decoder以使其不使用drawAll,因此不会将所有值加载xs到内存中。因此,我可以通过从文件中读取P.map print的解码流来代替打印 xs 列表。ints

0 投票
0 回答
96 浏览

http - 将 WAI 流与安全管道交错

我正在使用管道和 WAI 来传输音频。问题是我需要先查看安全管道中的一些数据,然后根据提取的信息选择响应标头,然后继续将该管道作为响应主体进行流式传输。这是我现在所拥有的,并且工作正常:

respond是标准Application的函数参数,Mpeg.headerFromPipe是我的前瞻性计算:

所以问题是:有什么方法可以在和用于选择标题respond之间移动。我无法拆分并分成两个不同的 SafeT计算线程,因为首先将完成管道和管道(这是执行几次、检查数据、返回内容并与其余部分链接的结果)将失败。headerFromPipeformphresponseStreamheaderFromPipeforrunSafeTchunksnext

0 投票
1 回答
171 浏览

haskell - 向下游发信号表明上游已用尽

问题

使用 Haskell管道库,我试图Pipe用以下类型定义一个:

其中Value数据类型定义为:

管道应遵守以下规律:

换句话说,管道应该等价于Pipes.Prelude.map Value,除了它应该Exhausted在所有上游值都被处理后产生一个额外的,让下游有机会执行一些最终操作。

可以这样Pipe定义吗?

例子

笔记

我知道该pipes-parse库提供了函数drawparseForever. 这些看起来很有用,但我不太明白如何将它们组合成Pipe符合上述规范的。

0 投票
3 回答
182 浏览

haskell - 如何使用管道将双标签替换为单标签?

我需要用单个选项卡替换字节字符串中的所有连续选项卡,如下所示:

变成

知道该怎么做。

经过半个小时的思考,我设法替换了第一次出现的双标签,就像这样(即使这实际上是错误的——它在一个空字符串中添加了一个标签):

但是,我仍然不知道如何替换所有出现的连续标签。

0 投票
0 回答
101 浏览

haskell - 使用 Haskell Pipes 嵌套一个先前扁平化的流

背景

我有一长串文件,我想将其内容流式传输到恒定内存中。

我正在使用Haskell Pipes 库使用以下嵌套类型对该流进行建模:

换句话说,外部生产者迭代文件,内部生产者迭代文件块。

问题

出于会计目的,我想暂时将此嵌套流扁平化为具有以下类型的内容:

在哪里:

编写一个函数来执行这种转换似乎很容易:

但是,我不确定如何编写逆变换:

这样:

nestFlattenedStream可以定义函数吗?

0 投票
1 回答
103 浏览

haskell - 为什么“效果”只密封两个流入,而不是所有流?

下面是packageEffect官方教程中提供的示意图。pipes

由于Effect没有任何数据流,我希望它只是Proxy X X X X,密封所有流。但相反,它允许两个流入。有什么特别的原因吗?如果我只是写 aEffect通常做的事情,使用 signature Proxy X X X X,它可以很好地通过编译器:

为什么我们不能run这样?

0 投票
1 回答
350 浏览

json - 使用管道将值序列化为 JSON 数组

我想将传入的值序列化为 JSON。每个值都有一个toJSON实例。最终结果应该是一个列表。当前代码如下:

问题是这样每一行都包含一个有效的 JSON 对象,但我希望整个结果是可解析的。我希望在第一个对象[输出一个字符之前,然后是每个元素后跟一个逗号,最后是另一个]. 我怎么能用管道做到这一点?

电流输出:

期望的输出:

我找到了pipes-aeson,但我不明白我应该如何使用它提供的功能。

编辑:我修改了 ErikR 的答案以获得 a Consumer,但它不输出右括号:

我不明白为什么。