module Data.HashMap.Strict.Extended where import Control.Monad import qualified Data.HashMap.Strict as HMS import Data.Hashable (Hashable) --- HashMap forWithKeyM :: (Eq k, Hashable k, Monad m) => HMS.HashMap k v1 -> (k -> v1 -> m v2) -> m (HMS.HashMap k v2) forWithKeyM = flip mapWithKeyM forWithKeyM_ :: (Eq k, Hashable k, Monad m) => HMS.HashMap k v1 -> (k -> v1 -> m ()) -> m () forWithKeyM_ = flip mapWithKeyM_ mapWithKeyM :: (Eq k, Hashable k, Monad m) => (k -> v1 -> m v2) -> HMS.HashMap k v1 -> m (HMS.HashMap k v2) mapWithKeyM f m = do fmap mconcat $ forM (HMS.toList m) $ \(k, v) -> HMS.singleton k <$> f k v mapWithKeyM_ :: (Eq k, Hashable k, Monad m) => (k -> v1 -> m ()) -> HMS.HashMap k v1 -> m () mapWithKeyM_ f m = do forM_ (HMS.toList m) $ \(k, v) -> HMS.singleton k <$> f k v