functor (K : OrderedType) (V : OrderedType->
  sig
    type key = K.t
    type value = V.t
    type t
    val empty : t
    val is_empty : t -> bool
    val add : t -> key -> value -> t
    val remove : t -> key -> value -> t
    val remove_all : t -> key -> t
    val mem : t -> key -> bool
    val find : t -> key -> value list
    val find_iter : t -> key -> (value -> unit) -> unit
    val count : t -> key -> int
    val iter : t -> (key -> value -> unit) -> unit
    val fold : t -> '-> ('-> key -> value -> 'a) -> 'a
    val size : t -> int
    val union : t -> t -> t
    val inter : t -> t -> t
    val diff : t -> t -> t
    val equal : t -> t -> bool
    val compare : t -> t -> int
    val submap : t -> t -> bool
    val to_seq : t -> (key * value) sequence
    val of_seq : ?init:t -> (key * value) sequence -> t
    val keys : t -> key sequence
    val values : t -> value sequence
  end