# Module type Identifiable.Map

    module type Map = sig .. end

    module T: Map.OrderedType

    include Map.S

    val filter_map : 'a t -> f:(key -> 'a -> 'b option) -> 'b t

    val of_list : (key * 'a) list -> 'a t

    val disjoint_union : ?eq:('a -> 'a -> bool) ->
           ?print:(Format.formatter -> 'a -> unit) -> 'a t -> 'a t -> 'a t

`disjoint_union m1 m2` contains all bindings from `m1` and `m2`. If some binding is present in both and the associated value is not equal, a Fatal_error is raised

    val union_right : 'a t -> 'a t -> 'a t

`union_right m1 m2` contains all bindings from `m1` and `m2`. If some binding is present in both, the one from `m2` is taken

    val union_left : 'a t -> 'a t -> 'a t

`union_left m1 m2 = union_right m2 m1`

    val union_merge : ('a -> 'a -> 'a) -> 'a t -> 'a t -> 'a t

    val rename : key t -> key -> key

    val map_keys : (key -> key) -> 'a t -> 'a t

    val keys : 'a t -> Stdlib.Set.Make(T).t

    val data : 'a t -> 'a list

    val of_set : (key -> 'a) -> Stdlib.Set.Make(T).t -> 'a t

    val transpose_keys_and_data : key t -> key t

    val transpose_keys_and_data_set : key t -> Stdlib.Set.Make(T).t t

    val print : (Format.formatter -> 'a -> unit) ->
           Format.formatter -> 'a t -> unit