-- | Maps a function over the keys.
-- 
-- The supplied function must be bijective with regards to k1 and k2, so it doesn't matter if a lot of values get mapped to Nothing. Also the domain of k1 should be as small as possible.
mapKeys' :: (k2 -> Maybe k1) -> FunMap k1 v -> FunMap k2 v
mapKeys' g (FunMap f) = FunMap (g >=> f)
mapKeys' :: (k2 -> Maybe k1) -> FunMap k1 v -> FunMap k2 v
mapKeys' g (FunMap f) = FunMap (g >=> f)
mapKeys' g (FunMap f) = FunMap (g >=> f)