pipes-zlib 0.0.1 → 0.1.0
raw patch · 2 files changed
+32/−36 lines, 2 filesdep +transformersdep −mtldep ~pipes-coredep ~zlib-bindingsPVP ok
version bump matches the API change (PVP)
Dependencies added: transformers
Dependencies removed: mtl
Dependency ranges changed: pipes-core, zlib-bindings
API changes (from Hackage documentation)
- Control.Pipe.Zlib: compress :: MonadIO m => Int -> WindowBits -> Pipe ByteString ByteString m ()
+ Control.Pipe.Zlib: compress :: MonadIO m => Int -> WindowBits -> Pipe ByteString ByteString m r
- Control.Pipe.Zlib: decompress :: MonadIO m => WindowBits -> Pipe ByteString ByteString m ()
+ Control.Pipe.Zlib: decompress :: MonadIO m => WindowBits -> Pipe ByteString ByteString m r
- Control.Pipe.Zlib: gunzip :: MonadIO m => Pipe ByteString ByteString m ()
+ Control.Pipe.Zlib: gunzip :: MonadIO m => Pipe ByteString ByteString m r
- Control.Pipe.Zlib: gzip :: MonadIO m => Pipe ByteString ByteString m ()
+ Control.Pipe.Zlib: gzip :: MonadIO m => Pipe ByteString ByteString m r
Files
- Control/Pipe/Zlib.hs +28/−32
- pipes-zlib.cabal +4/−4
Control/Pipe/Zlib.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE ScopedTypeVariables #-}- module Control.Pipe.Zlib ( gzip, gunzip,@@ -7,57 +5,55 @@ compress ) where --- adapted from conduit- import Codec.Zlib-import Control.Exception (SomeException) import Control.Monad-import Control.Monad.Trans (MonadIO, liftIO, lift)+import Control.Monad.IO.Class import Control.Pipe import Control.Pipe.Combinators-import Control.Pipe.Exception import qualified Data.ByteString as B import Prelude hiding (catch) -- | Gzip compression with default parameters.-gzip :: MonadIO m => Pipe B.ByteString B.ByteString m ()+gzip :: MonadIO m => Pipe B.ByteString B.ByteString m r gzip = compress 1 (WindowBits 31) -- | Gzip decompression with default parameters.-gunzip :: MonadIO m => Pipe B.ByteString B.ByteString m ()+gunzip :: MonadIO m => Pipe B.ByteString B.ByteString m r gunzip = decompress (WindowBits 31) decompress :: MonadIO m => WindowBits- -> Pipe B.ByteString B.ByteString m ()+ -> Pipe B.ByteString B.ByteString m r decompress config = do- inf <- lift . liftIO $ initInflate config- forP $ \x -> do- chunks <- lift . liftIO $ withInflateInput inf x callback- mapM_ yield chunks-- chunk <- lift . liftIO $ finishInflate inf- unless (B.null chunk) $- yield chunk+ inf <- liftIO $ initInflate config+ let finalize = do chunk <- liftIO $ finishInflate inf+ unless (B.null chunk) $ yield chunk+ forP' finalize $ \x -> do+ popper <- liftIO $ feedInflate inf x+ yieldPopper popper compress :: MonadIO m => Int -> WindowBits- -> Pipe B.ByteString B.ByteString m ()+ -> Pipe B.ByteString B.ByteString m r compress level config = do- def <- lift . liftIO $ initDeflate level config- forP $ \x -> do- chunks <- lift . liftIO $ withDeflateInput def x callback- mapM_ yield chunks- chunks <- lift . liftIO $ finishDeflate def callback- mapM_ yield chunks+ def <- liftIO $ initDeflate level config+ let finalize = yieldPopper (finishDeflate def)+ forP' finalize $ \x -> do+ popper <- liftIO $ feedDeflate def x+ yieldPopper popper -callback :: (Show a, MonadIO m) => m (Maybe a) -> m [a]-callback pop = go id where- go xs = do- x <- pop- case x of- Nothing -> return $ xs []- Just y -> go (xs . (y:))+forP' :: Monad m+ => Pipe a b m r2+ -> (a -> Pipe a b m r1)+ -> Pipe a b m r+forP' p f = forP f >> p >> discard++yieldPopper :: MonadIO m => Popper -> Pipe a B.ByteString m ()+yieldPopper pop = do+ x <- liftIO pop+ case x of+ Nothing -> return ()+ Just chunk -> yield chunk >> yieldPopper pop
pipes-zlib.cabal view
@@ -1,5 +1,5 @@ Name: pipes-zlib-Version: 0.0.1+Version: 0.1.0 License: BSD3 License-file: LICENSE Author: Paolo Capriotti@@ -19,9 +19,9 @@ Library Build-Depends: base (== 4.*),- mtl,- pipes-core (== 0.0.*),+ transformers (>= 0.2 && < 0.4),+ pipes-core (== 0.1.*), bytestring (== 0.9.*),- zlib-bindings+ zlib-bindings (== 0.1.*) Exposed-Modules: Control.Pipe.Zlib