dhodovsk / source-git / ghc-aeson

Forked from source-git/ghc-aeson 4 years ago
Clone

Blame Data/Aeson/Internal/Functions.hs

Packit 9a2dfb
-- |
Packit 9a2dfb
-- Module:      Data.Aeson.Functions
Packit 9a2dfb
-- Copyright:   (c) 2011-2016 Bryan O'Sullivan
Packit 9a2dfb
--              (c) 2011 MailRank, Inc.
Packit 9a2dfb
-- License:     BSD3
Packit 9a2dfb
-- Maintainer:  Bryan O'Sullivan <bos@serpentine.com>
Packit 9a2dfb
-- Stability:   experimental
Packit 9a2dfb
-- Portability: portable
Packit 9a2dfb
Packit 9a2dfb
module Data.Aeson.Internal.Functions
Packit 9a2dfb
    (
Packit 9a2dfb
      mapHashKeyVal
Packit 9a2dfb
    , mapKeyVal
Packit 9a2dfb
    , mapKey
Packit 9a2dfb
    ) where
Packit 9a2dfb
Packit 9a2dfb
import Prelude ()
Packit 9a2dfb
import Prelude.Compat
Packit 9a2dfb
Packit 9a2dfb
import Data.Hashable (Hashable)
Packit 9a2dfb
import qualified Data.HashMap.Strict as H
Packit 9a2dfb
import qualified Data.Map as M
Packit 9a2dfb
Packit 9a2dfb
-- | Transform a 'M.Map' into a 'H.HashMap' while transforming the keys.
Packit 9a2dfb
mapHashKeyVal :: (Eq k2, Hashable k2) => (k1 -> k2) -> (v1 -> v2)
Packit 9a2dfb
              -> M.Map k1 v1 -> H.HashMap k2 v2
Packit 9a2dfb
mapHashKeyVal fk kv = M.foldrWithKey (\k v -> H.insert (fk k) (kv v)) H.empty
Packit 9a2dfb
{-# INLINE mapHashKeyVal #-}
Packit 9a2dfb
Packit 9a2dfb
-- | Transform the keys and values of a 'H.HashMap'.
Packit 9a2dfb
mapKeyVal :: (Eq k2, Hashable k2) => (k1 -> k2) -> (v1 -> v2)
Packit 9a2dfb
          -> H.HashMap k1 v1 -> H.HashMap k2 v2
Packit 9a2dfb
mapKeyVal fk kv = H.foldrWithKey (\k v -> H.insert (fk k) (kv v)) H.empty
Packit 9a2dfb
{-# INLINE mapKeyVal #-}
Packit 9a2dfb
Packit 9a2dfb
-- | Transform the keys of a 'H.HashMap'.
Packit 9a2dfb
mapKey :: (Eq k2, Hashable k2) => (k1 -> k2) -> H.HashMap k1 v -> H.HashMap k2 v
Packit 9a2dfb
mapKey fk = mapKeyVal fk id
Packit 9a2dfb
{-# INLINE mapKey #-}