packages feed

foldl 1.4.8 → 1.4.9

raw patch · 5 files changed

+55/−13 lines, 5 filesdep −vector-builderdep ~profunctorsPVP ok

version bump matches the API change (PVP)

Dependencies removed: vector-builder

Dependency ranges changed: profunctors

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+1.4.9++* Implement `vector` utility more efficiently+ 1.4.8  * Only depend on `semigroups` for older GHC versions
foldl.cabal view
@@ -1,5 +1,5 @@ Name: foldl-Version: 1.4.8+Version: 1.4.9 Cabal-Version: >=1.10 Build-Type: Simple License: BSD3@@ -26,7 +26,7 @@     Build-Depends:         base         >= 4.8      && < 5   ,         bytestring   >= 0.9.2.1  && < 0.11,-        mwc-random   >= 0.13.1.0 && < 0.15,+        mwc-random   >= 0.13.1.0 && < 0.16,         primitive                   < 0.8 ,         text         >= 0.11.2.0 && < 1.3 ,         transformers >= 0.2.0.0  && < 0.6 ,@@ -37,8 +37,7 @@         contravariant               < 1.6 ,         profunctors                 < 5.6 ,         semigroupoids >= 1.0     && < 5.4 ,-        comonad      >= 4.0      && < 6   ,-        vector-builder              < 0.4+        comonad      >= 4.0      && < 6     if impl(ghc < 8.0)         Build-Depends:             semigroups   >= 0.17 && < 1.20@@ -50,6 +49,8 @@     Other-Modules:         Control.Foldl.Optics         Control.Foldl.Internal+        Control.Foldl.Util.Vector+        Control.Foldl.Util.MVector     GHC-Options: -O2 -Wall     Default-Language: Haskell2010 
src/Control/Foldl.hs view
@@ -197,9 +197,8 @@ import qualified Data.HashMap.Strict         as HashMap import qualified Data.HashSet                as HashSet import qualified Data.Vector.Generic         as V+import qualified Control.Foldl.Util.Vector   as V import qualified Data.Vector.Generic.Mutable as M-import qualified VectorBuilder.Builder-import qualified VectorBuilder.Vector import qualified Data.Semigroupoid  {- $setup@@ -1000,13 +999,7 @@  -- | Fold all values into a vector vector :: Vector v a => Fold a (v a)-vector = Fold step begin done-  where-    begin = VectorBuilder.Builder.empty--    step x a = x <> VectorBuilder.Builder.singleton a--    done = VectorBuilder.Vector.build+vector = V.fromReverseListN <$> length <*> revList {-# INLINABLE vector #-}  maxChunkSize :: Int
+ src/Control/Foldl/Util/MVector.hs view
@@ -0,0 +1,17 @@+{-# LANGUAGE BangPatterns #-}+module Control.Foldl.Util.MVector+where++import Data.Vector.Generic.Mutable+import Control.Monad.ST+++{-# INLINE writeListInReverseOrderStartingFrom #-}+writeListInReverseOrderStartingFrom :: MVector v a => v s a -> Int -> [a] -> ST s ()+writeListInReverseOrderStartingFrom v = let+  loop !index list = case list of+    h : t -> do+      unsafeWrite v index h+      loop (pred index) t+    _ -> return ()+  in loop
+ src/Control/Foldl/Util/Vector.hs view
@@ -0,0 +1,27 @@+{-|+General utilities for immutable vectors.+-}+{-# LANGUAGE RankNTypes #-}+module Control.Foldl.Util.Vector where++import Data.Vector.Generic+import Control.Monad.ST+import qualified Data.Vector.Generic.Mutable as M+import qualified Control.Foldl.Util.MVector as M+++{-|+>>> fromReverseListN 3 [1,2,3] :: Data.Vector.Vector Int+[3,2,1]+-}+{-# INLINE fromReverseListN #-}+fromReverseListN :: Vector v a => Int -> [a] -> v a+fromReverseListN size list =+  initialized size $ \ mv -> M.writeListInReverseOrderStartingFrom mv (pred size) list++{-# INLINE initialized #-}+initialized :: Vector v a => Int -> (forall s. Mutable v s a -> ST s ()) -> v a+initialized size initialize = runST $ do+  mv <- M.unsafeNew size+  initialize mv+  unsafeFreeze mv