conduit-extra 1.1.4 → 1.1.4.1
raw patch · 3 files changed
+93/−1 lines, 3 filesdep +bytestring-builderdep +criteriondep ~basedep ~blaze-builderdep ~conduitPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: bytestring-builder, criterion
Dependency ranges changed: base, blaze-builder, conduit
API changes (from Hackage documentation)
- Data.Conduit.Network.UDP: Message :: SrictNotUnpackedByteString -> SrictNotUnpackedSockAddr -> Message
+ Data.Conduit.Network.UDP: Message :: !ByteString -> !SockAddr -> Message
- Data.Conduit.Network.UDP: msgData :: Message -> SrictNotUnpackedByteString
+ Data.Conduit.Network.UDP: msgData :: Message -> !ByteString
- Data.Conduit.Network.UDP: msgSender :: Message -> SrictNotUnpackedSockAddr
+ Data.Conduit.Network.UDP: msgSender :: Message -> !SockAddr
Files
- Data/Conduit/Blaze.hs +6/−0
- bench/blaze.hs +72/−0
- conduit-extra.cabal +15/−1
Data/Conduit/Blaze.hs view
@@ -63,6 +63,7 @@ builderToByteString :: (MonadBase base m, PrimMonad base) => Conduit Builder m S.ByteString builderToByteString = builderToByteStringWith defaultStrategy+{-# INLINE builderToByteString #-} -- | --@@ -70,6 +71,7 @@ builderToByteStringFlush :: (MonadBase base m, PrimMonad base) => Conduit (Flush Builder) m (Flush S.ByteString) builderToByteStringFlush = builderToByteStringWithFlush defaultStrategy+{-# INLINE builderToByteStringFlush #-} -- | Incrementally execute builders on the given buffer and pass on the filled -- chunks as bytestrings. Note that, if the given buffer is too small for the@@ -82,6 +84,7 @@ => IO Buffer -- action yielding the inital buffer. -> Conduit Builder m S.ByteString unsafeBuilderToByteString = builderToByteStringWith . reuseBufferStrategy+{-# INLINE unsafeBuilderToByteString #-} -- | A conduit that incrementally executes builders and passes on the@@ -96,6 +99,7 @@ where yield' Flush = return () yield' (Chunk bs) = yield bs+{-# INLINE builderToByteStringWith #-} -- | --@@ -105,6 +109,7 @@ => BufferAllocStrategy -> Conduit (Flush Builder) m (Flush S.ByteString) builderToByteStringWithFlush = helper await yield+{-# INLINE builderToByteStringWithFlush #-} helper :: (MonadBase base m, PrimMonad base, Monad (t m), MonadTrans t) => t m (Maybe (Flush Builder))@@ -134,3 +139,4 @@ Chunk _ -> return () loop loop+{-# INLINE helper #-}
+ bench/blaze.hs view
@@ -0,0 +1,72 @@+{-# LANGUAGE OverloadedStrings #-}+import Data.Conduit+import qualified Data.Conduit.List as CL+import Data.Conduit.Blaze+import Criterion.Main+import Blaze.ByteString.Builder+import Data.Monoid+import qualified Data.ByteString.Builder as BS+import Data.Functor.Identity (runIdentity)+import Control.Monad.ST (runST)+import Data.ByteString.Lazy.Internal (defaultChunkSize)++count :: Int+count = 100000++single :: Builder+single = copyByteString "Hello World!\n"++oneBuilderLeft :: Builder+oneBuilderLeft =+ loop count mempty+ where+ loop 0 b = b+ loop i b = loop (i - 1) (b <> single)++oneBuilderRight :: Builder+oneBuilderRight =+ loop count mempty+ where+ loop 0 b = b+ loop i b = loop (i - 1) (b <> single)++builderSource :: Monad m => Source m Builder+builderSource = CL.replicate count single++singleBS :: BS.Builder+singleBS = BS.shortByteString "Hello World!\n"++oneBSBuilderLeft :: BS.Builder+oneBSBuilderLeft =+ loop count mempty+ where+ loop 0 b = b+ loop i b = loop (i - 1) (b <> singleBS)++oneBSBuilderRight :: BS.Builder+oneBSBuilderRight =+ loop count mempty+ where+ loop 0 b = b+ loop i b = loop (i - 1) (b <> singleBS)++builderBSSource :: Monad m => Source m BS.Builder+builderBSSource = CL.replicate count singleBS++main :: IO ()+main = defaultMain+ [ bench "conduit, strict, safe" $ whnfIO $+ builderSource $$ builderToByteString =$ CL.sinkNull+ , bench "conduit, strict, unsafe" $ whnfIO $+ builderSource $$ unsafeBuilderToByteString (allocBuffer defaultChunkSize) =$ CL.sinkNull++ , bench "one builder, left" $ nf toLazyByteString oneBuilderLeft+ , bench "one builder, right" $ nf toLazyByteString oneBuilderRight+ , bench "conduit, lazy" $ flip nf builderSource $ \src ->+ toLazyByteString $ runIdentity $ src $$ CL.fold (<>) mempty++ , bench "one bs builder, left" $ nf BS.toLazyByteString oneBSBuilderLeft+ , bench "one bs builder, right" $ nf BS.toLazyByteString oneBSBuilderRight+ , bench "conduit BS, lazy" $ flip nf builderBSSource $ \src ->+ BS.toLazyByteString $ runIdentity $ src $$ CL.fold (<>) mempty+ ]
conduit-extra.cabal view
@@ -1,5 +1,5 @@ Name: conduit-extra-Version: 1.1.4+Version: 1.1.4.1 Synopsis: Batteries included conduit: adapters for common libraries. Description: The conduit package itself maintains relative small dependencies. The purpose of this package is to collect commonly used utility functions wrapping other library dependencies, without depending on heavier-weight dependencies. The basic idea is that this package should only depend on haskell-platform packages and conduit.@@ -89,6 +89,20 @@ Data.Conduit.ProcessSpec Data.Conduit.TextSpec Data.Conduit.ZlibSpec++benchmark blaze+ type: exitcode-stdio-1.0+ hs-source-dirs: bench+ build-depends: base+ , blaze-builder+ , conduit+ , conduit-extra+ , criterion+ , bytestring+ , bytestring-builder+ , transformers+ main-is: blaze.hs+ ghc-options: -Wall -O2 -rtsopts source-repository head type: git