let fold_enum ~split_non_enumerable f m acc =
    match m with
    | Top _ -> raise Error_Top
    | Map m ->
        try
          M.fold
            (fun k vl acc ->
               let g one_ival acc =
                 let one_loc = inject k one_ival in
                 f one_loc acc
               in
               V.fold_enum ~split_non_enumerable g vl acc)
            m
            acc
        with V.Error_Top -> raise Error_Top