module StmHamt.UnfoldlM where import DeferredFolds.UnfoldlM import qualified PrimitiveExtras.By6Bits as By6Bits import qualified PrimitiveExtras.SmallArray as SmallArray import StmHamt.Prelude hiding (all, filter) import StmHamt.Types hamtElements :: Hamt a -> UnfoldlM STM a hamtElements :: forall a. Hamt a -> UnfoldlM STM a hamtElements (Hamt TVar (By6Bits (Branch a)) var) = TVar (By6Bits (Branch a)) -> UnfoldlM STM (By6Bits (Branch a)) forall a. TVar a -> UnfoldlM STM a tVarValue TVar (By6Bits (Branch a)) var UnfoldlM STM (By6Bits (Branch a)) -> (By6Bits (Branch a) -> UnfoldlM STM (Branch a)) -> UnfoldlM STM (Branch a) forall a b. UnfoldlM STM a -> (a -> UnfoldlM STM b) -> UnfoldlM STM b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= By6Bits (Branch a) -> UnfoldlM STM (Branch a) forall (m :: * -> *) a. Monad m => By6Bits a -> UnfoldlM m a By6Bits.elementsUnfoldlM UnfoldlM STM (Branch a) -> (Branch a -> UnfoldlM STM a) -> UnfoldlM STM a forall a b. UnfoldlM STM a -> (a -> UnfoldlM STM b) -> UnfoldlM STM b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Branch a -> UnfoldlM STM a forall a. Branch a -> UnfoldlM STM a branchElements branchElements :: Branch a -> UnfoldlM STM a branchElements :: forall a. Branch a -> UnfoldlM STM a branchElements = \case LeavesBranch Int _ SmallArray a array -> SmallArray a -> UnfoldlM STM a forall (m :: * -> *) e. Monad m => SmallArray e -> UnfoldlM m e SmallArray.elementsUnfoldlM SmallArray a array BranchesBranch Hamt a hamt -> Hamt a -> UnfoldlM STM a forall a. Hamt a -> UnfoldlM STM a hamtElements Hamt a hamt