问题标签 [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 - 如何通过流式 ByteString 跟踪进度?
我正在使用 streaming-utils streaming-utils 流式传输HTTP 响应正文。我想跟踪类似于bytestring-progress允许使用 lazy ByteString
s 的进度。我怀疑toChunks
有必要这样做,然后减少读取的一些累积字节并返回未修改的原始流。但我无法弄清楚,流媒体文档非常无用,主要是对替代库的宏大比较。
到目前为止,这是我尽最大努力的一些代码。它还不包括计数,只是尝试在块流过时打印块的大小(并且不编译)。
haskell - 处理流媒体库中的总和编码
这个问题背后的动机是这种情况 - 我们有一个由Sum
编码表示的值流。让我们假设Either ByteString ByteString
我们分别代表错误和良好状态的字节流。现在,我们有另一个可以压缩ByteString
流的函数。是否可以在输入流上运行此函数Either ByteString ByteString
,并压缩其中一个(不仅如此,Right
而且还可以Left
在Left
产生而不是 的情况下Right
)。compress
函数类型签名如下(我使用的是Streaming库):
我们的输入流是类型Stream (Of (Either ByteString ByteString)) m r
。那么,是否有某种转换器函数可以compress
在输入流上运行,并输出一个类型的流,Stream (Of (Either ByteString ByteString)) m r
其中两者都被压缩。
在我看来,我应该写一个自定义compress
,让我们说eitherCompress
如下:
那是对的吗?如果是这种情况,eitherCompress
使用zstd
库中的以下函数编写的好方法是什么:
我已经使用 编写了stream
生产者yield
,但我已经为输入只是源而不是流的简单情况实现了它们。非常感谢您对这个问题的帮助。
haskell - 流式传输字节串作为 WAI HTTP 服务器响应正文
我有一个值body :: BS.ByteString (ResourceT IO) ()
,来自一个基于BS.readFile
. 我想将该值作为来自WaiApplication
的响应正文进行流式传输。有一个助手,streamingResponse
它接受 type 的值Stream (Of ByteString) IO r
。我可以通过使用将我的转换BS.ByteString (ResourceT IO) ()
为Stream (Of ByteString) (ResourceT IO) ()
,BS.toChunks
但它包含一个额外的ResourceT
单子层。传递body
给streamingResponse
我:
我尝试了各种方法,例如在 runResourceT 中包装东西、绑定和提升值等,但真的不知道如何进行。如果需要额外的上下文,这是完整项目中的行。
更新0
hoist runResourceT body
似乎类型检查。有人还向我推荐了一个 Haskell Pipes thread,这可能是一个非常相关的问题,并且可能暗示了一个解决方案。
haskell - 使用流媒体库为每个块附加延迟?
Streaming 和 Haskell 的新手。
我一直在玩流媒体库,我对理解块部分特别感兴趣。例如:
或者:
在这里,我可以在每个元素之后引入一个延迟,但我想要的是在每个块之后有一个延迟,在这种情况下,每隔一个元素就延迟一次。我试过这个但没有编译:
我怎样才能做到这一点?
haskell - 何时在流式字节串上调用 runResourceT?
我是 Haskell 初学者,仍在学习 monad 转换器。
我正在尝试使用流字节串库来读取二进制文件,处理字节块,并在处理每个块时打印结果。我相信这是一个流行的streaming
库,它提供了惰性字节串的替代方案。看来作者复制粘贴了惰性字节字符串文档并添加了一些任意示例。
这些例子runResourceT
没有讨论它是什么或如何使用它。似乎应该runResourceT
在执行操作的任何流式字节字符串函数上使用。这很好,但是如果我正在读取一个处理块并打印它们的无限流呢?每次我想处理块时都应该调用 runResourceT 吗?
我的代码是这样的:
而且我不确定如何组织processByteChunks
为遍历二进制文件的递归函数。
如果我runResourceT
只调用一次,它会在打印之前读取无限文件,对吗?这似乎很糟糕。
haskell - 缺少结果类型?在函数长度 :: Monad m => ByteString mr -> m (Of Int r)
我有一个简单的函数,一次读取一个字节的二进制文件。它得到一个编译时错误,如下所示。问题似乎是bs2
,得到的 ByteStringBSSC.length
具有未知类型。我错过了类型约束r
吗?
编译时错误:
haskell - 流式库 Stream fmr 中函子背后的直觉
流式Stream
库的简化(无效)定义如下所示:
我试图了解引入这个函子的动机f
是什么。
一个典型的例子f
是Of a
,Of
定义为
当我读到这种有意义的定义时,f
就像Of a
an后跟more 可以从. 有了这种解释,定义中的. 但在这种情况下,一个更简单的版本应该是Stream
Of a b
a
b
f (Stream f)
Stream
Of a (Stream (Of a))
我很难理解为什么要使用这个函子的泛化f
。作者在介绍中说Stream
...可用于流式传输以任何函子为特征的连续不同步骤
f
和
一般类型
Stream f m r
表示一连串的步骤......其形状由“函子”参数确定f
。
但在Streaming.Prelude中,我能找到的唯一函子是Or a
,Stream (Of a) m
和Identity
。第一个是a
s 的流,第二个是流的流,第三个实现'erasure'。
我真的不明白。我可以实现所有这些事情,即简单的a
s 流、流的流和擦除,而无需f
在Stream
.
这个函子f
做了什么不能做的事情?