packages feed

firstify-0.1: Yhc/Core/Firstify/Mitchell/BiMap.hs

module Yhc.Core.Firstify.Mitchell.BiMap(
    BiMap, empty, lookup, lookupRev, insert
    ) where


import Prelude hiding (lookup)
import qualified Data.Map as Map

data BiMap key val = BiMap (Map.Map key val) (Map.Map val key)

empty :: BiMap k v
empty = BiMap Map.empty Map.empty

lookup :: Ord k => k -> BiMap k v -> Maybe v
lookup k (BiMap a b) = Map.lookup k a

lookupRev :: Ord v => v -> BiMap k v -> Maybe k
lookupRev v (BiMap a b) = Map.lookup v b

insert :: (Ord k, Ord v) => k -> v -> BiMap k v -> BiMap k v
insert k v (BiMap a b) = BiMap (Map.insert k v a) (Map.insert v k b)