问题标签 [haskell-streaming]

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 - 泛化 Haskell“Streaming”库的合并功能

目标是泛化Streaming.merge函数,

到任意数量的源流。策略是使用Data.Heap.HeapStream (Of a) m r排序的a。即bigMerge会有签名

(该列表也可以替换为Heap。)

我所拥有的是一种不太正确的相当邪恶的混合物。它是这样的:

为了完整性,首先关闭导入:

为了使用Heap类的元素,Ord需要:

引入extraInt以携带输入列表中流的索引,以便[r]可以使用正确顺序的元素构建返回的流。携带流的Maybe a当前值。

EqOrd实例是:

基本上,任何东西都是<=a Return,所有其他情况都使用 thea和/或ito 排序Elts。(errors用于调试目的。)

一些辅助函数Elt从.StreamHeapStream

核心是loop功能

带着厚脸皮unsafeUncons的存在

该函数loop用于heapMergeHeapStream

getRs只是将Return值组合成一个列表

然后,最后,

这是令人费解的,Effect没有得到正确处理,它依赖于Return, Step,Effect而不是inspectand next。它确实会在简单的输入上产生正确的结果,例如

我确信有一种方法可以正确且更惯用地执行此操作。一方面,Maybe ainElt可能是多余的,我可以直接做(Stream (Of a) m r)一个实例Ord,如果Effects 只是模式匹配,没有执行,那么这应该没问题。但Stream (Of (Heap (Stream (Of a) m r, Int))) (Heap (Int,r))看起来很奇怪。“带索引的流”IStream a m r = IStream Int ((Heap (Stream (Of a) m r) deriving Functor是 中的函子r,所以,如果有适当的==and <=,我会看Stream (IStream a m) m (Heap (Int, r))?

图书馆的这个功能方面对streaming我来说仍然有点困惑,所以任何帮助都将不胜感激。

0 投票
1 回答
178 浏览

haskell - Haskell 流 - 如何在复制后将 1 个流分成 2 个?

在 haskell中,有一个复制的例子

是否可以将其分成两个“干净”的流,以便它可以在结果下方打印?

请注意,上面的结果中没有更多的 ':>'。更一般地说,我不确定是否有函数可以“简化”嵌套流(或流的流)来自m(Of a)参与Stream (Of a) m r

[更新]

这个问题的背景是我正在寻找多次重用底层流的惯用方法。流是从数据库中提取的,IO 可能很昂贵。我还想获得对中间流的引用,以便更好地构建我的代码。一些模拟代码:

我希望 o1 o2 和 o3 与 original_stream 和 pull_from_database IO 操作完全相同,只在提取 original_stream 时执行一次。

0 投票
1 回答
170 浏览

haskell - Haskell 流 - 如何将原始流与结果流合并

使用Haskell-streaming,我可以轻松地对流进行分组并对每个组进行求和。

如何有一个函数myfn以一种顺序敏感的方式生成一个将上述两者合并的流?即我希望有一个结果流

0 投票
1 回答
98 浏览

haskell - 在下一步中使用结果流式传输管道

我正在使用该streaming软件包。我想S.store通过保留常量内存来使用由 定义的一个步骤的结果作为管道中后续步骤的参数。从文件中myStream加载和解析。

我有一个类型检查的以下示例:

但是,该行& insertB M.empty正在使用一个空地图,但我想从insertA函数中使用上一步中的地图。然后该insertB函数使用此 Map 进行查找。

我能想到的解决方案如下:

问题

这是否保留了流媒体的好处,比如在恒定内存中运行?它如何在后台解决这个问题,因为需要将流作为一个整体进行处理才能获得Map?它多次传递相同的流 - 从文件加载它 2 次以保留常量内存?

如果是这种情况(加载文件 2 次),如果流的源不是来自解析文件,而是来自某些只能读取一次的数据流怎么办?

对于这个问题,是否还有其他优雅的解决方案也具有流式传输的好处,管道中的下一步需要使用上一步的结果?

0 投票
1 回答
74 浏览

haskell - 在流管道中将 ResourceT 与括号结合起来

这是我的代码的简化:

在以下行中存在类型错误go stream

错误说:

问题

  1. 怎样做才能使这个代码类型检查并且仍然保证在calculateA函数中释放资源是安全的?
  2. 我正在使用读取多个文件C.readFile,然后将其包装在runResourceT. 这会正确释放所有文件句柄吗?
  3. 配乐好不好?(请注意,我需要与calculateA分开的功能myLinesStream