Module Tjr_polymap

module Private : sig ... end
type ('k, 'v) t = {
card : int;
map : ('k'v) PMap.t;
}
val lift : (('k'v) PMap.t -> 'a) -> ('k'v) t -> 'a
val mem : 'a -> ('a'b) t -> bool
val map : ('v -> 'u) -> ('k'v) t -> ('k'u) t
val bindings : ('k'v) t -> ('k * 'v) list
val empty : ('k -> 'k -> int) -> ('k'v) t
val cardinal : ('k'v) t -> int
val is_empty : ('k'v) t -> bool
val iter : ('k -> 'v -> unit) -> ('k'v) t -> unit
val find : 'k -> ('k'v) t -> 'v
val find_opt : 'k -> ('k'v) t -> 'v option
val remove : 'k -> ('k'v) t -> ('k'v) t
val add : 'k -> 'v -> ('k'v) t -> ('k'v) t
val foldi : ('a -> 'b -> 'c -> 'c) -> ('a'b) t -> 'c -> 'c
val empty_int_map : unit -> (int, 'a) t
val empty_string_map : unit -> (string, 'a) t
val from_bindings : compare:('a -> 'a -> int) -> ('a * 'b) list -> ('a'b) t

NOTE later bindings take precedence

val union : ('a'b) t -> ('a'b) t -> ('a'b) t

NOTE m2 takes precedence