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