zlib-conduit 0.4.0 → 0.4.0.1
raw patch · 3 files changed
+24/−11 lines, 3 filesdep +resourcetPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: resourcet
API changes (from Hackage documentation)
- Data.Conduit.Zlib: compress :: MonadUnsafeIO m => Int -> WindowBits -> Conduit ByteString m ByteString
+ Data.Conduit.Zlib: compress :: (MonadUnsafeIO m, MonadThrow m) => Int -> WindowBits -> Conduit ByteString m ByteString
- Data.Conduit.Zlib: compressFlush :: MonadUnsafeIO m => Int -> WindowBits -> Conduit (Flush ByteString) m (Flush ByteString)
+ Data.Conduit.Zlib: compressFlush :: (MonadUnsafeIO m, MonadThrow m) => Int -> WindowBits -> Conduit (Flush ByteString) m (Flush ByteString)
- Data.Conduit.Zlib: decompress :: MonadUnsafeIO m => WindowBits -> Conduit ByteString m ByteString
+ Data.Conduit.Zlib: decompress :: (MonadUnsafeIO m, MonadThrow m) => WindowBits -> Conduit ByteString m ByteString
- Data.Conduit.Zlib: decompressFlush :: MonadUnsafeIO m => WindowBits -> Conduit (Flush ByteString) m (Flush ByteString)
+ Data.Conduit.Zlib: decompressFlush :: (MonadUnsafeIO m, MonadThrow m) => WindowBits -> Conduit (Flush ByteString) m (Flush ByteString)
- Data.Conduit.Zlib: gzip :: MonadUnsafeIO m => Conduit ByteString m ByteString
+ Data.Conduit.Zlib: gzip :: (MonadThrow m, MonadUnsafeIO m) => Conduit ByteString m ByteString
- Data.Conduit.Zlib: ungzip :: MonadUnsafeIO m => Conduit ByteString m ByteString
+ Data.Conduit.Zlib: ungzip :: (MonadUnsafeIO m, MonadThrow m) => Conduit ByteString m ByteString
Files
- Data/Conduit/Zlib.hs +18/−8
- test/main.hs +4/−2
- zlib-conduit.cabal +2/−1
Data/Conduit/Zlib.hs view
@@ -12,25 +12,35 @@ ) where import Codec.Zlib-import Data.Conduit+import Data.Conduit hiding (unsafeLiftIO)+import qualified Data.Conduit as C import Data.ByteString (ByteString) import qualified Data.ByteString as S+import Control.Exception (try)+import Control.Monad ((<=<)) -- | Gzip compression with default parameters.-gzip :: MonadUnsafeIO m => Conduit ByteString m ByteString+gzip :: (MonadThrow m, MonadUnsafeIO m) => Conduit ByteString m ByteString gzip = compress 1 (WindowBits 31) -- | Gzip decompression with default parameters.-ungzip :: MonadUnsafeIO m => Conduit ByteString m ByteString+ungzip :: (MonadUnsafeIO m, MonadThrow m) => Conduit ByteString m ByteString ungzip = decompress (WindowBits 31) +unsafeLiftIO :: (MonadUnsafeIO m, MonadThrow m) => IO a -> m a+unsafeLiftIO =+ either rethrow return <=< C.unsafeLiftIO . try+ where+ rethrow :: MonadThrow m => ZlibException -> m a+ rethrow = monadThrow+ -- | -- Decompress (inflate) a stream of 'ByteString's. For example: -- -- > sourceFile "test.z" $= decompress defaultWindowBits $$ sinkFile "test" decompress- :: MonadUnsafeIO m+ :: (MonadUnsafeIO m, MonadThrow m) => WindowBits -- ^ Zlib parameter (see the zlib-bindings package as well as the zlib C library) -> Conduit ByteString m ByteString decompress config = NeedInput@@ -54,7 +64,7 @@ -- | Same as 'decompress', but allows you to explicitly flush the stream. decompressFlush- :: MonadUnsafeIO m+ :: (MonadUnsafeIO m, MonadThrow m) => WindowBits -- ^ Zlib parameter (see the zlib-bindings package as well as the zlib C library) -> Conduit (Flush ByteString) m (Flush ByteString) decompressFlush config = NeedInput@@ -91,7 +101,7 @@ -- the format (zlib vs. gzip). compress- :: MonadUnsafeIO m+ :: (MonadUnsafeIO m, MonadThrow m) => Int -- ^ Compression level -> WindowBits -- ^ Zlib parameter (see the zlib-bindings package as well as the zlib C library) -> Conduit ByteString m ByteString@@ -109,7 +119,7 @@ -- | Same as 'compress', but allows you to explicitly flush the stream. compressFlush- :: MonadUnsafeIO m+ :: (MonadUnsafeIO m, 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)@@ -131,7 +141,7 @@ Nothing -> Done Nothing () Just chunk -> HaveOutput (Done Nothing ()) (return ()) (Chunk chunk) -goPopper :: MonadUnsafeIO m+goPopper :: (MonadUnsafeIO m, MonadThrow m) => (input -> Conduit input m output) -> Conduit input m output -> (S.ByteString -> output)
test/main.hs view
@@ -10,6 +10,7 @@ import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L import Data.ByteString.Lazy.Char8 ()+import Control.Monad.Trans.Resource (runExceptionT_) main :: IO () main = hspecX $ do@@ -18,13 +19,14 @@ let bss = map S.pack bss' lbs = L.fromChunks bss src = mconcat $ map (CL.sourceList . return) bss- outBss <- src C.$= CZ.gzip C.$= CZ.ungzip C.$$ CL.consume+ outBss <- runExceptionT_ $ src C.$= CZ.gzip C.$= CZ.ungzip C.$$ CL.consume return $ lbs == L.fromChunks outBss prop "flush" $ \bss' -> runST $ do let bss = map S.pack $ filter (not . null) bss' bssC = concatMap (\bs -> [C.Chunk bs, C.Flush]) bss src = mconcat $ map (CL.sourceList . return) bssC- outBssC <- src C.$= CZ.compressFlush 5 (CZ.WindowBits 31)+ outBssC <- runExceptionT_+ $ src C.$= CZ.compressFlush 5 (CZ.WindowBits 31) C.$= CZ.decompressFlush (CZ.WindowBits 31) C.$$ CL.consume return $ bssC == outBssC
zlib-conduit.cabal view
@@ -1,5 +1,5 @@ Name: zlib-conduit-Version: 0.4.0+Version: 0.4.0.1 Synopsis: Streaming compression/decompression via conduits. Description: Streaming compression/decompression via conduits. License: BSD3@@ -37,6 +37,7 @@ , bytestring , transformers , zlib-conduit+ , resourcet ghc-options: -Wall source-repository head