I'm pleased to announce two new packages: zlib and bzlib which provide
functions for compression and decompression in the gzip and bzip2
formats:

Both provide pure functions on streams of data represented by lazy
ByteStrings:

compress, decompress :: ByteString -> ByteString

This makes it easy to use either in memory or with disk or network IO.
For example a simple gzip compression program is just:

> import qualified Data.ByteString.Lazy as ByteString
> import qualified Codec.Compression.GZip as GZip
>
> main = ByteString.interact GZip.compress

Or you could lazily read in and decompress @.gz@ file using:

> content <- fmap GZip.decompress (readFile file)

The code is available via darcs:

darcs get http://haskell.org/~duncan/zlib
darcs get http://haskell.org/~duncan/bzlib

(Note that if you are using GHC-6.5 then you'll need to edit the .cabal
file to remove the dependency on fps, since ByteStrings are provided in
the base package in GHC-6.5.)

There is API documentation too:

http://haskell.org/~duncan/zlib/docs
http://haskell.org/~duncan/bzlib/docs

Both packages are bindings to the corresponding C libs, so they depend
on those C libraries. Fortunately both zlib and bzlib2 are available on
every OS. It also means that the compression speed is as you would
expect since it's the C lib that is doing all the work.

I'm very happy to get feedback on the API, the documentation or of
course any bug reports.

Duncan

_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to