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

parsing - 将普通 attoparsec 解析器代码转换为基于管道/管道

我使用以下方法编写了以下解析代码attoparsec

这适用于小型文件,我执行它是这样的:

但是当文件的大小大于 70MB 时,它会消耗大量的内存。作为解决方案,我想我会使用attoparsec-conduit. 在浏览了他们的API之后,我不确定如何让它们一起工作。我的解析器具有类型Parser Test,但它sinkParser实际上接受 type 的解析器Parser a b。我对如何在常量内存中执行这个解析器感兴趣?(基于管道的解决方案也是可以接受的,但我不习惯 Pipes API。)

0 投票
2 回答
378 浏览

haskell - 在实现 MonadIO 的 Monad 中嵌入异步

我有一些pipes-concurrency看起来像这样的代码:

问题 1:这显然不会编译,因为runEffectwill returnMonadIO m => m ()asyncrequires IO a。有没有办法做到这一点?还是我被困在强迫我的管道包含 IO monad 中的效果?

问题 2:在实现 MonadIO 的 Monad 中嵌入异步是否有意义?不确定我是否在这里很好地表达了自己。

谢谢!

0 投票
1 回答
135 浏览

haskell - 简单函数的管道等效代码

比方说,我有以下类型:

现在,我想编写一个基于管道的函数来执行此操作:

假设我已经有 和 的 Producers LinkSnap如何getSnaps从这两个 Producer 中实现 Pipes 世界中的上述功能:

psnap和的实际类型plink更多(使用 attoparsec-pipes 创建),但我想知道如何实现 getSnaps frompsnap和的功能plink。有没有解决此类问题的正确方法?

0 投票
2 回答
263 浏览

haskell - 跳过管道中的第一行 - attoparsec

我的类型:

我的解析器:

现在为了跳过第一行,我做了这样的事情:

但是上面的parser函数使每个备用链接都跳过(这很明显)。如何仅以与 Pipes 生态系统一起使用的方式跳过第一行(Producer应该产生单个Test值。)这是我不想要的一个明显的解决方案(以下代码仅在我修改 testParser 以读取换行符时才有效) 因为它返回整个[Test]而不是单个值:

有什么想法可以解决这个问题吗?

0 投票
2 回答
171 浏览

haskell - 在管道内运行消费者

我需要组合一个消费者和一个管道,以便消费者的输出可以输入管道的输入。

我想这可以用这样的组合器来解决:

或这个:

或类似以下的提升功能:

或像这样:

我试过consumer >~ pipe没有成功。那么如何处理呢?

0 投票
1 回答
558 浏览

loops - 如果 MonadPlus 是“生成器”类,那么什么是“消费者”类?

APipe可以分为两部分:生成器部分 ( yield) 和消费者部分 ( await)。

如果你有一个Pipe只使用它的生成器一半,并且只返回()(或从不返回),那么它可以表示为“ListT正确完成”。事实证明,它MonadPlus可以用来表示像 ListT-done-right 这样的任何东西。引用 Gabriel Gonzalez 的话

请注意,您可以ListT仅使用转换器依赖项构建任何(不仅仅是管道中的)。例如,以下是您将如何实现的ListT模拟Pipes.Prelude.stdinLn

这将像任何类型一样输入 checkListT并为所有这些做正确的事情。

ListT所以我的问题是这样的:管道的MonadPlus消费者部分是否有双重关系?

要求:

  • 一个从不使用yield,只返回()(或从不返回)但确实使用的管道await可以表示为这个“对 ListT”。
  • “dual to ListT”可以推广到“dual of MonadPlus”
0 投票
1 回答
50 浏览

haskell - 每个管道在向下游发送之前评估?

通过管道教程导致玩弄一些示例:

但以上产生:

与我的预期相反,f1 和 f2 会产生相同的结果(即 f2 的结果)。问题是:他们为什么不呢?

0 投票
2 回答
1084 浏览

haskell - 带有 RWST 的管道中的空间泄漏

以下程序的内存分析表明,noleak 函数在常量内存中运行,而泄漏函数以线性方式泄漏内存。dflemstr 指出这可能是由于 RWST 导致了无限的分配链。是这种情况吗?还有其他解决方案吗?我实际上不需要 Writer monad。

环境:

ARCH 64 位上的 GHC 7.8.3

ghc Pipe.hs -o 管道 -prof

0 投票
1 回答
182 浏览

haskell - 在 Haste 和 Haskell 中使用管道睡觉

我正在开发一个大量使用 Pipes 库的 Haskell 程序。我正在将库的一部分移植到Haste。我遇到绊脚石的一个地方是javascript处理睡眠的奇怪方式。

我想写的是一个简单的管道,它在发送结果之前会延迟

但是,睡眠似乎像回调一样工作。

我试着做

但是类型没有正确排列。有没有办法获得延迟管道?

0 投票
1 回答
383 浏览

haskell - 管道和非管道代码之间的并发注意事项

我正在为管道接口中的某些编码包装一个 C 库,但我遇到了一些需要做出的设计决策。

建立 C 库后,我们保留一个编码器上下文。有了这个,我们可以编码,或者改变一些参数(让我们调用 Haskell 接口到最后一个函数tune :: Context -> Int -> IO ())。我的问题有两个部分:

  1. 编码部分很容易包含在 . 中Pipe Foo Bar IO (),但我也想公开tune. 由于同时使用编码上下文必须受到锁保护,因此我需要在管道中的每次迭代时都使用锁,并tune使用相同的锁进行保护。但现在我觉得我在强迫用户隐藏锁。我在这里吠错树了吗?这种情况在管道生态系统中通常是如何解决的?就而言,我希望我的特定代码所属的管道始终在其自己的线程中运行,同时进行调整,但我不想将这种观点强加给任何用户。管道生态系统中的其他软件包似乎也没有强迫他们的用户喜欢。
  2. 不再使用的编码上下文需要正确地取消初始化。在管道生态系统中,如何确保IO在管道被销毁时处理这些事情(在这种情况下执行 som 操作)?

一个具体的例子是包装一个压缩库,在这种情况下,上面可以是:

  1. 压缩强度是可调的。我们设置了管道,它愉快地运行。假设必须序列化对压缩编解码器上下文的并发访问,最好如何在管道继续运行时更改压缩强度设置?
  2. 压缩库在设置时从 Haskell 堆中分配了一堆内存,当管道被拆除时,我们需要调用一些库函数来清理这些内存。

谢谢......这可能都很明显,但我对管道生态系统很陌生。

编辑:发布后阅读此内容,我很确定这是我在这里问过的最模糊的问题。啊! 对不起 ;-)