let map_i f m =
    match m with
    | Top _ -> top
    | Map m ->
        M.fold
          (fun k vl acc ->
             join acc (f k vl))
          m
          bottom