cereal-unordered-containers-0.1: library/Cereal/UnorderedContainers/Extras/StrictHashMap.hs
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