问题标签 [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.
haskell - 泛化 Haskell“Streaming”库的合并功能
目标是泛化Streaming.merge
函数,
到任意数量的源流。策略是使用Data.Heap.Heap
按Stream (Of a) m r
排序的a
。即bigMerge
会有签名
(该列表也可以替换为Heap
。)
我所拥有的是一种不太正确的相当邪恶的混合物。它是这样的:
为了完整性,首先关闭导入:
为了使用Heap
类的元素,Ord
需要:
引入extraInt
以携带输入列表中流的索引,以便[r]
可以使用正确顺序的元素构建返回的流。携带流的Maybe a
当前值。
Eq
和Ord
实例是:
基本上,任何东西都是<=
a Return
,所有其他情况都使用 thea
和/或i
to 排序Elt
s。(errors
用于调试目的。)
一些辅助函数Elt
从.Stream
Heap
Stream
核心是loop
功能
带着厚脸皮unsafeUncons
的存在
该函数loop
用于heapMerge
将Heap
Stream
getRs
只是将Return
值组合成一个列表
然后,最后,
这是令人费解的,Effect
没有得到正确处理,它依赖于Return
, Step
,Effect
而不是inspect
and next
。它确实会在简单的输入上产生正确的结果,例如
我确信有一种方法可以正确且更惯用地执行此操作。一方面,Maybe a
inElt
可能是多余的,我可以直接做(Stream (Of a) m r)
一个实例Ord
,如果Effect
s 只是模式匹配,没有执行,那么这应该没问题。但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
我来说仍然有点困惑,所以任何帮助都将不胜感激。
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 时执行一次。
haskell - Haskell 流 - 如何将原始流与结果流合并
使用Haskell-streaming,我可以轻松地对流进行分组并对每个组进行求和。
如何有一个函数myfn
以一种顺序敏感的方式生成一个将上述两者合并的流?即我希望有一个结果流
haskell - 在下一步中使用结果流式传输管道
我正在使用该streaming
软件包。我想S.store
通过保留常量内存来使用由 定义的一个步骤的结果作为管道中后续步骤的参数。从文件中myStream
加载和解析。
我有一个类型检查的以下示例:
但是,该行& insertB M.empty
正在使用一个空地图,但我想从insertA
函数中使用上一步中的地图。然后该insertB
函数使用此 Map 进行查找。
我能想到的解决方案如下:
问题
这是否保留了流媒体的好处,比如在恒定内存中运行?它如何在后台解决这个问题,因为需要将流作为一个整体进行处理才能获得Map
?它多次传递相同的流 - 从文件加载它 2 次以保留常量内存?
如果是这种情况(加载文件 2 次),如果流的源不是来自解析文件,而是来自某些只能读取一次的数据流怎么办?
对于这个问题,是否还有其他优雅的解决方案也具有流式传输的好处,管道中的下一步需要使用上一步的结果?
haskell - 在流管道中将 ResourceT 与括号结合起来
这是我的代码的简化:
在以下行中存在类型错误go stream
:
错误说:
问题
- 怎样做才能使这个代码类型检查并且仍然保证在
calculateA
函数中释放资源是安全的? - 我正在使用读取多个文件
C.readFile
,然后将其包装在runResourceT
. 这会正确释放所有文件句柄吗? - 配乐好不好?(请注意,我需要与
calculateA
分开的功能myLinesStream
)