我是 Haskell 初学者,仍在学习 monad 转换器。
我正在尝试使用流字节串库来读取二进制文件,处理字节块,并在处理每个块时打印结果。我相信这是一个流行的streaming
库,它提供了惰性字节串的替代方案。看来作者复制粘贴了惰性字节字符串文档并添加了一些任意示例。
这些例子runResourceT
没有讨论它是什么或如何使用它。似乎应该runResourceT
在执行操作的任何流式字节字符串函数上使用。这很好,但是如果我正在读取一个处理块并打印它们的无限流呢?每次我想处理块时都应该调用 runResourceT 吗?
我的代码是这样的:
import qualified Data.ByteString.Streaming as BSS
import System.TimeIt
main = timeIt $ processByteChunks $ BSS.drop 100 $ BSS.readFile "filename"
而且我不确定如何组织processByteChunks
为遍历二进制文件的递归函数。
如果我runResourceT
只调用一次,它会在打印之前读取无限文件,对吗?这似乎很糟糕。
main = timeIt $ runResourceT $ processByteChunks $ BSS.drop 100 $ BSS.readFile "filename"