Safe Haskell | None |
---|---|
Language | Haskell98 |
Streaming compression and decompression using conduits.
Parts of this code were taken from zlib-enum and adapted for conduits.
- compress :: (MonadBase base m, PrimMonad base, MonadThrow m) => Int -> WindowBits -> Conduit ByteString m ByteString
- decompress :: (MonadBase base m, PrimMonad base, MonadThrow m) => WindowBits -> Conduit ByteString m ByteString
- gzip :: (MonadThrow m, MonadBase base m, PrimMonad base) => Conduit ByteString m ByteString
- ungzip :: (MonadBase base m, PrimMonad base, MonadThrow m) => Conduit ByteString m ByteString
- compressFlush :: (MonadBase base m, PrimMonad base, MonadThrow m) => Int -> WindowBits -> Conduit (Flush ByteString) m (Flush ByteString)
- decompressFlush :: (MonadBase base m, PrimMonad base, MonadThrow m) => WindowBits -> Conduit (Flush ByteString) m (Flush ByteString)
- multiple :: Monad m => Conduit ByteString m a -> Conduit ByteString m a
- data WindowBits :: * = WindowBits Int
- defaultWindowBits :: WindowBits
Conduits
:: (MonadBase base m, PrimMonad base, MonadThrow m) | |
=> Int | Compression level |
-> WindowBits | Zlib parameter (see the zlib-bindings package as well as the zlib C library) |
-> Conduit ByteString m ByteString |
Compress (deflate) a stream of ByteString
s. The WindowBits
also control
the format (zlib vs. gzip).
:: (MonadBase base m, PrimMonad base, MonadThrow m) | |
=> WindowBits | Zlib parameter (see the zlib-bindings package as well as the zlib C library) |
-> Conduit ByteString m ByteString |
Decompress (inflate) a stream of ByteString
s. For example:
sourceFile "test.z" $= decompress defaultWindowBits $$ sinkFile "test"
gzip :: (MonadThrow m, MonadBase base m, PrimMonad base) => Conduit ByteString m ByteString Source
Gzip compression with default parameters.
ungzip :: (MonadBase base m, PrimMonad base, MonadThrow m) => Conduit ByteString m ByteString Source
Gzip decompression with default parameters.
Flushing
:: (MonadBase base m, PrimMonad base, MonadThrow m) | |
=> Int | Compression level |
-> WindowBits | Zlib parameter (see the zlib-bindings package as well as the zlib C library) |
-> Conduit (Flush ByteString) m (Flush ByteString) |
Same as compress
, but allows you to explicitly flush the stream.
:: (MonadBase base m, PrimMonad base, MonadThrow m) | |
=> WindowBits | Zlib parameter (see the zlib-bindings package as well as the zlib C library) |
-> Conduit (Flush ByteString) m (Flush ByteString) |
Same as decompress
, but allows you to explicitly flush the stream.
Decompression combinators
multiple :: Monad m => Conduit ByteString m a -> Conduit ByteString m a Source
The standard decompress
and ungzip
functions will only decompress a
single compressed entity from the stream. This combinator will exhaust the
stream completely of all individual compressed entities. This is useful for
cases where you have a concatenated archive, e.g. cat file1.gz file2.gz >
combined.gz
.
Usage:
sourceFile "combined.gz" $$ multiple ungzip =$ consume
This combinator will not fail on an empty stream. If you want to ensure that at least one compressed entity in the stream exists, consider a usage such as:
sourceFile "combined.gz" $$ (ungzip >> multiple ungzip) =$ consume
Since: 1.1.10
Re-exported from zlib-bindings
data WindowBits :: *
This specifies the size of the compression window. Larger values of this parameter result in better compression at the expense of higher memory usage.
The compression window size is the value of the the window bits raised to
the power 2. The window bits must be in the range 8..15
which corresponds
to compression window sizes of 256b to 32Kb. The default is 15 which is also
the maximum size.
The total amount of memory used depends on the window bits and the
MemoryLevel
. See the MemoryLevel
for the details.
Eq WindowBits | |
Ord WindowBits | |
Show WindowBits | |
Generic WindowBits | |
type Rep WindowBits = D1 D1WindowBits ((:+:) (C1 C1_0WindowBits (S1 NoSelector (Rec0 Int))) (C1 C1_1WindowBits U1)) |
defaultWindowBits :: WindowBits
The default WindowBits
is 15 which is also the maximum size.