我在学术目的上写了一个关于haskell的小(相对)应用程序。我正在基于此代码http://www.haskell.org/haskellwiki/Toy_compression_implementations实现霍夫曼压缩。
我的此代码变体在这里https://github.com/kravitz/har/blob/a5d221f227c27fd1c5587217a29a169a377521a6/huffman.hs它使用惰性字节串。当我实现 RLE 压缩时,一切都很顺利,因为它一步处理输入流。但是 Huffman 对其进行了两次处理,结果我在内存中存储了一个评估的字节串,这对大文件不利(但对于相对较小的文件,它也在堆中分配了太多空间)。这不仅是我的怀疑,因为 profiling 还表明大部分堆都被字节串分配吃掉了。
此外,我在文件中序列化流长度,它也可能导致完整的字节串加载到内存中。有什么简单的方法可以说 ghc 友善并多次重新评估流?