packages feed

vector-builder 0.3.1 → 0.3.2

raw patch · 6 files changed

+113/−3 lines, 6 filesdep +bugdep +criteriondep +foldlPVP ok

version bump matches the API change (PVP)

Dependencies added: bug, criterion, foldl, rerebase

API changes (from Hackage documentation)

Files

+ foldl-benchmark/Main.hs view
@@ -0,0 +1,25 @@+module Main where++import Prelude+import Bug+import Criterion+import Criterion.Main+import qualified Control.Foldl as A+import qualified Data.Vector as F+import qualified VectorBuilder.Builder as N+import qualified VectorBuilder.Vector as O+++main =+  defaultMain+  [+    bench "vector-builder" (nf foldWithBuilder input),+    bench "default" (nf foldDefault input)+  ]+  where+    input =+      [0..1000]+    foldWithBuilder input =+      A.fold (A.foldMap N.singleton O.build) input :: Vector Int+    foldDefault input =+      runST (A.foldM A.vector input) :: Vector Int
+ foldl-profiling/Main.hs view
@@ -0,0 +1,15 @@+module Main where++import Prelude+import qualified Data.Vector.Unboxed as V+import qualified Control.Foldl as L+import qualified VectorBuilder.Builder as N+import qualified VectorBuilder.Vector as O++main :: IO ()+main = (print . V.maximum) (L.fold fold input) where+  input = [1..1000000] :: [Int]+  fold = L.Fold step begin done where+    begin = N.empty+    step x a = x <> N.singleton a+    done = O.build
library/VectorBuilder/Private/Action.hs view
@@ -11,15 +11,19 @@   deriving (Functor)  instance Applicative (Action element) where+  {-# INLINABLE pure #-}   pure result =     Action (const (pure result))+  {-# INLINABLE (<*>) #-}   (<*>) (Action actionFn1) (Action actionFn2) =     Action ((<*>) <$> actionFn1 <*> actionFn2) +{-# INLINABLE unsafeWrite #-} unsafeWrite :: Int -> element -> Action element () unsafeWrite index element =   Action (\mVector -> A.unsafeWrite mVector index element) +{-# INLINABLE unsafeWriteMany #-} unsafeWriteMany :: B.Vector vector element => Int -> vector element -> Action element () unsafeWriteMany startingIndex appendedVector =   Action (\mVector -> B.ifoldM' (\_ index element -> A.unsafeWrite mVector (startingIndex + index) element) () appendedVector)
library/VectorBuilder/Private/Builder.hs view
@@ -16,14 +16,17 @@ -- | -- Provides support for /O(1)/ concatenation. instance Monoid (Builder element) where+  {-# INLINE mempty #-}   mempty =     VectorBuilder.Private.Builder.empty+  {-# INLINE mappend #-}   mappend =     prepend  -- | -- Provides support for /O(1)/ concatenation. instance Semigroup (Builder element) where+  {-# INLINE (<>) #-}   (<>) =     prepend @@ -32,12 +35,14 @@  -- | -- Empty builder.+{-# INLINE empty #-} empty :: Builder element empty =   Builder (pure ())  -- | -- Builder of a single element.+{-# INLINE singleton #-} singleton :: element -> Builder element singleton element =   Builder (A.snoc element)@@ -46,6 +51,7 @@ -- Builder from an immutable vector of elements. --  -- Supports all kinds of vectors: boxed, unboxed, primitive, storable.+{-# INLINE vector #-} vector :: B.Vector vector element => vector element -> Builder element vector vector =   Builder (A.append vector)@@ -53,18 +59,22 @@  -- * Updates +{-# INLINE snoc #-} snoc :: element -> Builder element -> Builder element snoc element (Builder action) =   Builder (action *> A.snoc element) +{-# INLINE cons #-} cons :: element -> Builder element -> Builder element cons element (Builder action) =   Builder (A.snoc element *> action) +{-# INLINE prepend #-} prepend :: Builder element -> Builder element -> Builder element prepend (Builder action1) (Builder action2) =   Builder (action1 *> action2) +{-# INLINE append #-} append :: Builder element -> Builder element -> Builder element append (Builder action1) (Builder action2) =   Builder (action1 <* action2)
library/VectorBuilder/Private/SizeTrackingAction.hs view
@@ -11,22 +11,26 @@   deriving (Functor)  instance Applicative (SizeTrackingAction element) where+  {-# INLINE pure #-}   pure result =     SizeTrackingAction (\size -> (pure result, size))+  {-# INLINE (<*>) #-}   (<*>) (SizeTrackingAction sizeTrackingActionFn1) (SizeTrackingAction sizeTrackingActionFn2) =     SizeTrackingAction sizeTrackingActionFn     where       sizeTrackingActionFn size =         case sizeTrackingActionFn1 size of-          (action1, size1) ->+          (action1, !size1) ->             case sizeTrackingActionFn2 size1 of-              (action2, size2) ->+              (action2, !size2) ->                 (action1 <*> action2, size2) +{-# INLINE snoc #-} snoc :: element -> SizeTrackingAction element () snoc element =   SizeTrackingAction (\size -> (C.unsafeWrite size element, succ size)) +{-# INLINE append #-} append :: B.Vector vector element => vector element -> SizeTrackingAction element () append appendedVector =   SizeTrackingAction (\size -> (C.unsafeWriteMany size appendedVector, size + B.length appendedVector))
vector-builder.cabal view
@@ -1,7 +1,7 @@ name:   vector-builder version:-  0.3.1+  0.3.2 synopsis:   Vector builder description:@@ -106,3 +106,55 @@     vector-builder,     --      rebase+++benchmark foldl-benchmark+  type: +    exitcode-stdio-1.0+  hs-source-dirs:+    foldl-benchmark+  main-is:+    Main.hs+  ghc-options:+    -O2+    -threaded+    "-with-rtsopts=-N"+    -rtsopts+  default-extensions:+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples+  default-language:+    Haskell2010+  build-depends:+    vector-builder,+    foldl == 1.2.*,+    -- benchmarking:+    criterion >= 1.1 && < 2,+    -- general:+    bug == 1.*,+    rerebase < 2+++test-suite foldl-profiling+  type: +    exitcode-stdio-1.0+  hs-source-dirs:+    foldl-profiling+  main-is:+    Main.hs+  ghc-options:+    -O2+    -threaded+    "-with-rtsopts=-N"+    -rtsopts+  default-extensions:+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples+  default-language:+    Haskell2010+  build-depends:+    vector-builder,+    foldl == 1.2.*,+    -- benchmarking:+    criterion >= 1.1 && < 2,+    -- general:+    bug == 1.*,+    rerebase < 2