quicklz- binding to QuickLZ compression library





This module provides a high level ByteString interface to the QuickLZ library. More info about quicklz can be found here: http://quicklz.com

QuickLZ is fast and compresses well. The library that is bundled with this version is QuickLZ v1.5.0, with the compression level set to 1.

Truthfully, the only laws that hold with this library are the following:

(decompress . compress) == id
(decompress xs) == (decompress xs)

Note that:

(compress xs) == (compress xs)

Does not hold. QuickLZ uses random data to seed part of the compression, so the lengths and compressed results can differ. But they will always decompress back to the same string, e.g., compress is not referentially transparent, but decompress is (so don't go and insert compressed data as keys into any Data.Maps.)

Arguably this is an abomination; nonetheless, this pure interface is a nice abstraction.


Compressing and decompressing strict ByteStrings

compress :: ByteString -> ByteStringSource

Compresses the input ByteString.

decompress :: ByteString -> ByteStringSource

Decompress the input ByteString.