module Cereal.UnorderedContainers.Extras.StrictHashMap ( module Data.HashMap.Strict, traverse_, replicateM, ) where import Cereal.UnorderedContainers.Prelude hiding (traverse_, replicateM, insert, empty) import Data.HashMap.Strict {-# INLINE traverse_ #-} traverse_ :: Applicative m => (k -> v -> m ()) -> HashMap k v -> m () traverse_ m = foldrWithKey step init where init = pure () step k v acc = m k v *> acc {-# INLINE replicateM #-} replicateM :: (Monad m, Eq k, Hashable k) => Int -> m (k, v) -> m (HashMap k v) replicateM amount m = let iterate index !state = if index < amount then do (k, v) <- m iterate (succ index) (insert k v state) else return state in iterate 0 empty