packages feed

fast-builder 0.0.0.2 → 0.0.0.3

raw patch · 4 files changed

+22/−44 lines, 4 filesdep ~true-namePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: true-name

API changes (from Hackage documentation)

- Data.ByteString.FastBuilder.Internal: [BoundedGrowingBuffer] :: {-# UNPACK #-} !(ForeignPtr Word8) -> !Int -> DynamicSink
- Data.ByteString.FastBuilder.Internal: [BuildM] :: ((a -> Builder) -> Builder) -> BuildM a
- Data.ByteString.FastBuilder.Internal: [BuilderState] :: !(Ptr Word8) -> !(Ptr Word8) -> (State# RealWorld) -> BuilderState
- Data.ByteString.FastBuilder.Internal: [Builder] :: (DataSink -> BuilderState -> BuilderState) -> Builder
- Data.ByteString.FastBuilder.Internal: [ChunkOverflowException] :: !ByteString -> !(MVar Request) -> !(MVar Response) -> !Int -> ChunkOverflowException
- Data.ByteString.FastBuilder.Internal: [Done] :: !(Ptr Word8) -> Response
- Data.ByteString.FastBuilder.Internal: [DynamicSink] :: !(IORef DynamicSink) -> DataSink
- Data.ByteString.FastBuilder.Internal: [Error] :: SomeException -> Response
- Data.ByteString.FastBuilder.Internal: [GrowingBuffer] :: !(IORef (ForeignPtr Word8)) -> DataSink
- Data.ByteString.FastBuilder.Internal: [HandleSink] :: !Handle -> !(IORef Queue) -> DataSink
- Data.ByteString.FastBuilder.Internal: [InsertByteString] :: !(Ptr Word8) -> !ByteString -> Response
- Data.ByteString.FastBuilder.Internal: [MoreBuffer] :: !(Ptr Word8) -> !Int -> Response
- Data.ByteString.FastBuilder.Internal: [Queue] :: !(ForeignPtr Word8) -> !Int -> Queue
- Data.ByteString.FastBuilder.Internal: [Request] :: {-# UNPACK #-} !(Ptr Word8) -> {-# UNPACK #-} !(Ptr Word8) -> Request
- Data.ByteString.FastBuilder.Internal: [SuspendBuilderException] :: !(MVar ()) -> SuspendBuilderException
- Data.ByteString.FastBuilder.Internal: [ThreadedSink] :: !(MVar Request) -> !(MVar Response) -> DynamicSink
- Data.ByteString.FastBuilder.Internal: instance Applicative BuildM
- Data.ByteString.FastBuilder.Internal: instance Exception ChunkOverflowException
- Data.ByteString.FastBuilder.Internal: instance Exception SuspendBuilderException
- Data.ByteString.FastBuilder.Internal: instance Functor BuildM
- Data.ByteString.FastBuilder.Internal: instance IsString Builder
- Data.ByteString.FastBuilder.Internal: instance Monad BuildM
- Data.ByteString.FastBuilder.Internal: instance Monoid Builder
- Data.ByteString.FastBuilder.Internal: instance Monoid Write
- Data.ByteString.FastBuilder.Internal: instance Show ChunkOverflowException
- Data.ByteString.FastBuilder.Internal: instance Show Response
- Data.ByteString.FastBuilder.Internal: instance Show SuspendBuilderException
+ Data.ByteString.FastBuilder.Internal: BoundedGrowingBuffer :: {-# UNPACK #-} !(ForeignPtr Word8) -> !Int -> DynamicSink
+ Data.ByteString.FastBuilder.Internal: BuildM :: ((a -> Builder) -> Builder) -> BuildM a
+ Data.ByteString.FastBuilder.Internal: Builder :: (DataSink -> BuilderState -> BuilderState) -> Builder
+ Data.ByteString.FastBuilder.Internal: BuilderState :: !(Ptr Word8) -> !(Ptr Word8) -> (State# RealWorld) -> BuilderState
+ Data.ByteString.FastBuilder.Internal: ChunkOverflowException :: !ByteString -> !(MVar Request) -> !(MVar Response) -> !Int -> ChunkOverflowException
+ Data.ByteString.FastBuilder.Internal: Done :: !(Ptr Word8) -> Response
+ Data.ByteString.FastBuilder.Internal: DynamicSink :: !(IORef DynamicSink) -> DataSink
+ Data.ByteString.FastBuilder.Internal: Error :: SomeException -> Response
+ Data.ByteString.FastBuilder.Internal: GrowingBuffer :: !(IORef (ForeignPtr Word8)) -> DataSink
+ Data.ByteString.FastBuilder.Internal: HandleSink :: !Handle -> !(IORef Queue) -> DataSink
+ Data.ByteString.FastBuilder.Internal: InsertByteString :: !(Ptr Word8) -> !ByteString -> Response
+ Data.ByteString.FastBuilder.Internal: MoreBuffer :: !(Ptr Word8) -> !Int -> Response
+ Data.ByteString.FastBuilder.Internal: Queue :: !(ForeignPtr Word8) -> !Int -> Queue
+ Data.ByteString.FastBuilder.Internal: Request :: {-# UNPACK #-} !(Ptr Word8) -> {-# UNPACK #-} !(Ptr Word8) -> Request
+ Data.ByteString.FastBuilder.Internal: SuspendBuilderException :: !(MVar ()) -> SuspendBuilderException
+ Data.ByteString.FastBuilder.Internal: ThreadedSink :: !(MVar Request) -> !(MVar Response) -> DynamicSink
+ Data.ByteString.FastBuilder.Internal: instance Data.String.IsString Data.ByteString.FastBuilder.Internal.Builder
+ Data.ByteString.FastBuilder.Internal: instance GHC.Base.Applicative Data.ByteString.FastBuilder.Internal.BuildM
+ Data.ByteString.FastBuilder.Internal: instance GHC.Base.Functor Data.ByteString.FastBuilder.Internal.BuildM
+ Data.ByteString.FastBuilder.Internal: instance GHC.Base.Monad Data.ByteString.FastBuilder.Internal.BuildM
+ Data.ByteString.FastBuilder.Internal: instance GHC.Base.Monoid Data.ByteString.FastBuilder.Internal.Builder
+ Data.ByteString.FastBuilder.Internal: instance GHC.Base.Monoid Data.ByteString.FastBuilder.Internal.Write
+ Data.ByteString.FastBuilder.Internal: instance GHC.Exception.Exception Data.ByteString.FastBuilder.Internal.ChunkOverflowException
+ Data.ByteString.FastBuilder.Internal: instance GHC.Exception.Exception Data.ByteString.FastBuilder.Internal.SuspendBuilderException
+ Data.ByteString.FastBuilder.Internal: instance GHC.Show.Show Data.ByteString.FastBuilder.Internal.ChunkOverflowException
+ Data.ByteString.FastBuilder.Internal: instance GHC.Show.Show Data.ByteString.FastBuilder.Internal.Response
+ Data.ByteString.FastBuilder.Internal: instance GHC.Show.Show Data.ByteString.FastBuilder.Internal.SuspendBuilderException

Files

Data/ByteString/FastBuilder/Internal.hs view
@@ -110,7 +110,10 @@ instance Monoid Builder where   mempty = Builder $ \_ bs -> bs   {-# INLINE mempty #-}-  mappend (Builder a) (Builder b) = oneShotBuilder $+  mappend (Builder a) (Builder b) = rebuild $+      -- This rebuild means we basically give up on write/write rewrites.+      -- However this can make a big difference in some cases, and seems+      -- important enough. TODO: get rid of it once GHC 8.0 is out.     Builder $ \dex bs -> b dex (a dex bs)   {-# INLINE mappend #-}   mconcat xs = foldr mappend mempty xs
benchmarks/aeson/HashMapExts.hs view
@@ -4,28 +4,27 @@ {-# LANGUAGE UnboxedTuples #-} module HashMapExts where -import qualified Data.HashMap.Strict as H+import Data.HashMap.Strict (HashMap) import Data.Monoid import GHC.Exts (Array#, sizeofArray#, indexArray#, Int(..))-import Unsafe.TrueName (quasiName)--import HashMapNames+import Unsafe.TrueName (truename) -foldMapWithKey :: (Monoid m) => (k -> a -> m) -> H.HashMap k a -> m+foldMapWithKey :: (Monoid m) => (k -> a -> m) -> HashMap k a -> m foldMapWithKey f = go   where     go hm = case hm of-      [quasiName|Empty ''H.HashMap|] -> mempty-      [quasiName|BitmapIndexed ''H.HashMap _ ary|] -> foldMapArray go ary-      [quasiName|Full ''H.HashMap ary|] -> foldMapArray go ary-      [quasiName|Collision ''H.HashMap _ ary|] -> foldMapArray leaf ary-      [quasiName|Leaf ''H.HashMap _ l|] -> leaf l+      [truename| ''HashMap Empty |] -> mempty+      [truename| ''HashMap BitmapIndexed | _ ary |] -> foldMapArray go ary+      [truename| ''HashMap Full | ary |] -> foldMapArray go ary+      [truename| ''HashMap Collision | _ ary |] -> foldMapArray leaf ary+      [truename| ''HashMap Leaf | _ l |] -> leaf l -    leaf $(lPat "k" "v")  = f k v+    leaf [truename| ''HashMap Leaf Leaf L | k v|]  = f k v {-# INLINE foldMapWithKey #-} -foldMapArray :: (Monoid m) => (a -> m) -> $(arrayType) a -> m-foldMapArray f $(arrayPat "arr") = foldMapArray' f arr+foldMapArray :: (Monoid m) =>+    (a -> m) -> [truename| ''HashMap Full Array |] a -> m+foldMapArray f [truename| ''HashMap Full Array Array | a |] = foldMapArray' f a  foldMapArray' :: (Monoid m) => (a -> m) -> Array# a -> m foldMapArray' f arr = go 0
− benchmarks/aeson/HashMapNames.hs
@@ -1,27 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}-module HashMapNames where--import qualified Data.HashMap.Strict as H-import Language.Haskell.TH-import Unsafe.TrueName (trueName)--lPat :: String -> String -> Q Pat-lPat a b = do-  leafConName <- trueName "Leaf" ''H.HashMap-  leafTyName <- trueName "Leaf" leafConName-  lName <- trueName "L" leafTyName-  conP lName [varP (mkName a), varP (mkName b)]--arrayTypeName :: Q Name-arrayTypeName = do-  fullConName <- trueName "Full" ''H.HashMap-  trueName "Array" fullConName--arrayType :: Q Type-arrayType = conT =<< arrayTypeName--arrayPat :: String -> Q Pat-arrayPat a = do-  arrayTyName <- arrayTypeName-  arrayConName <- trueName "Array" arrayTyName-  conP arrayConName [varP (mkName a)]
fast-builder.cabal view
@@ -1,5 +1,5 @@ name:                fast-builder-version:             0.0.0.2+version:             0.0.0.3 synopsis:            Fast ByteString Builder description:         An efficient implementation of ByteString builder. It should be faster than                      the standard implementation in most cases.@@ -15,6 +15,7 @@ build-type:          Simple -- extra-source-files:   cabal-version:       >=1.10+tested-with:         GHC >= 7.10.1 && < 8  library   exposed-modules:     Data.ByteString.FastBuilder,@@ -31,8 +32,10 @@   type:                exitcode-stdio-1.0   main-is:             main.hs   hs-source-dirs:      benchmarks/aeson-  other-modules:       Fast, Bstr, HashMapExts, HashMapNames-  build-depends:       base, fast-builder, aeson, criterion, bytestring, scientific, text, vector, deepseq, unordered-containers, ghc-prim, true-name, template-haskell+  other-modules:       Fast, Bstr, HashMapExts+  build-depends:       base, fast-builder, aeson, criterion, bytestring,+    scientific, text, vector, deepseq, unordered-containers, ghc-prim,+    template-haskell, true-name >= 0.1.0.0   ghc-options:         -fsimpl-tick-factor=120   ghc-options:         -Wall -threaded -g -rtsopts