1{-# LANGUAGE NoImplicitPrelude #-} 2-- | 3-- Module: Data.Aeson.Functions 4-- Copyright: (c) 2011-2016 Bryan O'Sullivan 5-- (c) 2011 MailRank, Inc. 6-- License: BSD3 7-- Maintainer: Bryan O'Sullivan <bos@serpentine.com> 8-- Stability: experimental 9-- Portability: portable 10 11module Data.Aeson.Internal.Functions 12 ( 13 mapHashKeyVal 14 , mapKeyVal 15 , mapKey 16 ) where 17 18import Prelude.Compat 19 20import Data.Hashable (Hashable) 21import qualified Data.HashMap.Strict as H 22import qualified Data.Map as M 23 24-- | Transform a 'M.Map' into a 'H.HashMap' while transforming the keys. 25mapHashKeyVal :: (Eq k2, Hashable k2) => (k1 -> k2) -> (v1 -> v2) 26 -> M.Map k1 v1 -> H.HashMap k2 v2 27mapHashKeyVal fk kv = M.foldrWithKey (\k v -> H.insert (fk k) (kv v)) H.empty 28{-# INLINE mapHashKeyVal #-} 29 30-- | Transform the keys and values of a 'H.HashMap'. 31mapKeyVal :: (Eq k2, Hashable k2) => (k1 -> k2) -> (v1 -> v2) 32 -> H.HashMap k1 v1 -> H.HashMap k2 v2 33mapKeyVal fk kv = H.foldrWithKey (\k v -> H.insert (fk k) (kv v)) H.empty 34{-# INLINE mapKeyVal #-} 35 36-- | Transform the keys of a 'H.HashMap'. 37mapKey :: (Eq k2, Hashable k2) => (k1 -> k2) -> H.HashMap k1 v -> H.HashMap k2 v 38mapKey fk = mapKeyVal fk id 39{-# INLINE mapKey #-} 40