packages feed

stm-hamt 1.1.2.1 → 1.2

raw patch · 8 files changed

+43/−43 lines, 8 filesdep ~deferred-foldsdep ~primitive-extrasPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: deferred-folds, primitive-extras

API changes (from Hackage documentation)

- StmHamt.Hamt: unfoldM :: Hamt a -> UnfoldM STM a
- StmHamt.SizedHamt: unfoldM :: SizedHamt a -> UnfoldM STM a
+ StmHamt.Hamt: unfoldlM :: Hamt a -> UnfoldlM STM a
+ StmHamt.SizedHamt: unfoldlM :: SizedHamt a -> UnfoldlM STM a

Files

library/StmHamt/Hamt.hs view
@@ -11,7 +11,7 @@   lookup,   lookupExplicitly,   reset,-  unfoldM,+  unfoldlM,   listT, ) where@@ -20,7 +20,7 @@ import StmHamt.Types import qualified Focus as Focus import qualified StmHamt.Focuses as Focus-import qualified StmHamt.UnfoldMs as UnfoldMs+import qualified StmHamt.UnfoldlM as UnfoldlM import qualified StmHamt.ListT as ListT import qualified StmHamt.IntOps as IntOps import qualified PrimitiveExtras.SmallArray as SmallArray@@ -127,8 +127,8 @@ reset :: Hamt a -> STM () reset (Hamt branchSsaVar) = writeTVar branchSsaVar SparseSmallArray.empty -unfoldM :: Hamt a -> UnfoldM STM a-unfoldM = UnfoldMs.hamtElements+unfoldlM :: Hamt a -> UnfoldlM STM a+unfoldlM = UnfoldlM.hamtElements  listT :: Hamt a -> ListT STM a listT = ListT.hamtElements
library/StmHamt/Prelude.hs view
@@ -94,8 +94,8 @@  -- deferred-folds --------------------------import DeferredFolds.Unfold as Exports (Unfold(..))-import DeferredFolds.UnfoldM as Exports (UnfoldM(..))+import DeferredFolds.Unfoldl as Exports (Unfoldl(..))+import DeferredFolds.UnfoldlM as Exports (UnfoldlM(..))  -- list-t -------------------------
library/StmHamt/SizedHamt.hs view
@@ -13,7 +13,7 @@   insert,   lookup,   reset,-  unfoldM,+  unfoldlM,   listT, ) where@@ -26,34 +26,34 @@  {-# INLINE new #-} new :: STM (SizedHamt element)-new = SizedHamt <$> Hamt.new <*> newTVar 0+new = SizedHamt <$> newTVar 0 <*> Hamt.new  {-# INLINE newIO #-} newIO :: IO (SizedHamt element)-newIO = SizedHamt <$> Hamt.newIO <*> newTVarIO 0+newIO = SizedHamt <$> newTVarIO 0 <*> Hamt.newIO  -- | -- /O(1)/. {-# INLINE null #-} null :: SizedHamt element -> STM Bool-null (SizedHamt _ sizeVar) = (== 0) <$> readTVar sizeVar+null (SizedHamt sizeVar _) = (== 0) <$> readTVar sizeVar  -- | -- /O(1)/. {-# INLINE size #-} size :: SizedHamt element -> STM Int-size (SizedHamt _ sizeVar) = readTVar sizeVar+size (SizedHamt sizeVar _) = readTVar sizeVar  {-# INLINE reset #-} reset :: SizedHamt element -> STM ()-reset (SizedHamt hamt sizeVar) =+reset (SizedHamt sizeVar hamt) =   do     Hamt.reset hamt     writeTVar sizeVar 0  {-# INLINE focus #-} focus :: (Eq key, Hashable key) => Focus element STM result -> (element -> key) -> key -> SizedHamt element -> STM result-focus focus elementToKey key (SizedHamt hamt sizeVar) =+focus focus elementToKey key (SizedHamt sizeVar hamt) =   do     (result, sizeModifier) <- Hamt.focus newFocus elementToKey key hamt     forM_ sizeModifier (modifyTVar' sizeVar)@@ -63,19 +63,19 @@  {-# INLINE insert #-} insert :: (Eq key, Hashable key) => (element -> key) -> element -> SizedHamt element -> STM ()-insert elementToKey element (SizedHamt hamt sizeVar) =+insert elementToKey element (SizedHamt sizeVar hamt) =   do     inserted <- Hamt.insert elementToKey element hamt     when inserted (modifyTVar' sizeVar succ)  {-# INLINE lookup #-} lookup :: (Eq key, Hashable key) => (element -> key) -> key -> SizedHamt element -> STM (Maybe element)-lookup elementToKey key (SizedHamt hamt _) = Hamt.lookup elementToKey key hamt+lookup elementToKey key (SizedHamt _ hamt) = Hamt.lookup elementToKey key hamt -{-# INLINE unfoldM #-}-unfoldM :: SizedHamt a -> UnfoldM STM a-unfoldM (SizedHamt hamt _) = Hamt.unfoldM hamt+{-# INLINE unfoldlM #-}+unfoldlM :: SizedHamt a -> UnfoldlM STM a+unfoldlM (SizedHamt _ hamt) = Hamt.unfoldlM hamt  {-# INLINE listT #-} listT :: SizedHamt a -> ListT STM a-listT (SizedHamt hamt _) = Hamt.listT hamt+listT (SizedHamt _ hamt) = Hamt.listT hamt
library/StmHamt/Types.hs view
@@ -8,7 +8,7 @@ extended with its size-tracking functionality, allowing for a fast 'size' operation. -}-data SizedHamt element = SizedHamt !(Hamt element) !(TVar Int)+data SizedHamt element = SizedHamt !(TVar Int) !(Hamt element)  {-| STM-specialized Hash Array Mapped Trie.
− library/StmHamt/UnfoldMs.hs
@@ -1,16 +0,0 @@-module StmHamt.UnfoldMs where--import StmHamt.Prelude hiding (filter, all)-import StmHamt.Types-import DeferredFolds.UnfoldM-import qualified PrimitiveExtras.SmallArray as SmallArray-import qualified PrimitiveExtras.SparseSmallArray as SparseSmallArray---hamtElements :: Hamt a -> UnfoldM STM a-hamtElements (Hamt var) = tVarValue var >>= SparseSmallArray.elementsUnfoldM >>= branchElements--branchElements :: Branch a -> UnfoldM STM a-branchElements = \ case-  LeavesBranch _ array -> SmallArray.elementsUnfoldM array-  BranchesBranch hamt -> hamtElements hamt
+ library/StmHamt/UnfoldlM.hs view
@@ -0,0 +1,16 @@+module StmHamt.UnfoldlM where++import StmHamt.Prelude hiding (filter, all)+import StmHamt.Types+import DeferredFolds.UnfoldlM+import qualified PrimitiveExtras.SmallArray as SmallArray+import qualified PrimitiveExtras.SparseSmallArray as SparseSmallArray+++hamtElements :: Hamt a -> UnfoldlM STM a+hamtElements (Hamt var) = tVarValue var >>= SparseSmallArray.elementsUnfoldlM >>= branchElements++branchElements :: Branch a -> UnfoldlM STM a+branchElements = \ case+  LeavesBranch _ array -> SmallArray.elementsUnfoldlM array+  BranchesBranch hamt -> hamtElements hamt
stm-hamt.cabal view
@@ -1,5 +1,5 @@ name: stm-hamt-version: 1.1.2.1+version: 1.2 synopsis: STM-specialised Hash Array Mapped Trie description:   A low-level data-structure,@@ -31,16 +31,16 @@     StmHamt.Focuses     StmHamt.Prelude     StmHamt.Types-    StmHamt.UnfoldMs+    StmHamt.UnfoldlM     StmHamt.ListT   build-depends:     base >=4.9 && <5,-    deferred-folds >=0.6.5 && <0.7,+    deferred-folds >=0.7 && <0.8,     focus >=1 && <1.1,     hashable <2,     list-t >=1.0.1 && <1.1,     primitive >=0.6.4 && <0.7,-    primitive-extras >=0.6.7 && <0.7,+    primitive-extras >=0.7 && <0.8,     transformers >=0.5 && <0.6  test-suite test
test/Main.hs view
@@ -15,7 +15,7 @@ import qualified StmHamt.Hamt as Hamt import qualified Data.HashMap.Strict as HashMap import qualified Focus-import qualified DeferredFolds.UnfoldM as UnfoldM+import qualified DeferredFolds.UnfoldlM as UnfoldlM   main =@@ -40,7 +40,7 @@       hamtToListInIo hamt =         fmap reverse $         atomically $-        UnfoldM.foldlM' (\ state element -> return (element : state)) [] (Hamt.unfoldM hamt)+        UnfoldlM.foldlM' (\ state element -> return (element : state)) [] (Hamt.unfoldlM hamt)        listToListThruHamtInIo :: (Eq key, Hashable key, Eq value) => [(key, value)] -> IO [(key, value)]       listToListThruHamtInIo = hamtFromListUsingInsertInIo >=> hamtToListInIo@@ -203,7 +203,7 @@                       -- traceM =<< atomically (Hamt.introspect hamt)                       result2 <- atomically $ applyToStmHamt hamt                       -- traceM =<< atomically (Hamt.introspect hamt)-                      list <- atomically $ UnfoldM.foldlM' (\ state element -> return (element : state)) [] (Hamt.unfoldM hamt)+                      list <- atomically $ UnfoldlM.foldlM' (\ state element -> return (element : state)) [] (Hamt.unfoldlM hamt)                       return (result2, sort list)                     in                       -- trace ("-----") $