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 +4/−4
- library/StmHamt/Prelude.hs +2/−2
- library/StmHamt/SizedHamt.hs +13/−13
- library/StmHamt/Types.hs +1/−1
- library/StmHamt/UnfoldMs.hs +0/−16
- library/StmHamt/UnfoldlM.hs +16/−0
- stm-hamt.cabal +4/−4
- test/Main.hs +3/−3
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 ("-----") $