functor (K : Types.Mono.ArbitraryComparable->
  functor (V : Types.Mono.ArbitraryComparable->
    sig
      type t
      type key = K.t
      type elt = V.t
      type cursor
      type 'a result
      type 'a key_ = key
      type 'a elt_ = elt
      type ('a, 'b) map = t
      type ('a, 'b, 'c) result_ = 'a result
      val empty : ('a, 'b) map
      val is_empty : ('a, 'b) map -> bool
      val mem : 'a key_ -> ('a, 'b) map -> (bool, 'a, 'b) result_
      val add : 'a key_ -> 'b elt_ -> ('a, 'b) map -> ('a, 'b) map
      val singleton : 'a key_ -> 'b elt_ -> ('a, 'b) map
      val remove : 'a key_ -> ('a, 'b) map -> ('a, 'b) map
      val find : 'a key_ -> ('a, 'b) map -> ('b elt_, 'a, 'b) result_
      val min_key : ('a, 'b) map -> ('a key_, 'a, 'b) result_
      val max_key : ('a, 'b) map -> ('a key_, 'a, 'b) result_
      val min_keyval : ('a, 'b) map -> ('a key_ * 'b elt_, 'a, 'b) result_
      val max_keyval : ('a, 'b) map -> ('a key_ * 'b elt_, 'a, 'b) result_
      val cardinal : ('a, 'b) map -> int
      val iter : ('a key_ -> 'b elt_ -> unit) -> ('a, 'b) map -> unit
      val fold : ('-> 'b key_ -> 'c elt_ -> 'a) -> '-> ('b, 'c) map -> 'a
      val map : ('a elt_ -> 'b elt_) -> ('c, 'a) map -> ('c, 'b) map
      val mapi :
        ('a key_ -> 'b elt_ -> 'c elt_) -> ('a, 'b) map -> ('a, 'c) map
      val union :
        ('a key_ -> 'b elt_ -> 'b elt_ -> 'b elt_) ->
        ('a, 'b) map -> ('a, 'b) map -> ('a, 'b) map
      val inter :
        ('a key_ -> 'b elt_ -> 'b elt_ -> 'b elt_) ->
        ('a, 'b) map -> ('a, 'b) map -> ('a, 'b) map
      val diff :
        ('a key_ -> 'b elt_ -> 'b elt_ -> bool) ->
        ('a, 'b) map -> ('a, 'b) map -> ('a, 'b) map
      val well_formed : ('a, 'b) map -> bool
      val of_result : ('a, 'b, 'c) result_ -> 'a
      type ('a, 'b) cursor_ = cursor
      val to_cursor : ('a, 'b) map -> ('a, 'b) cursor_
      val from_cursor : ('a, 'b) cursor_ -> ('a, 'b) map
      val at_top : ('a, 'b) cursor_ -> bool
      val at_left : ('a, 'b) cursor_ -> bool
      val at_right : ('a, 'b) cursor_ -> bool
      val move_up : ('a, 'b) cursor_ -> ('a, 'b) cursor_
      val move_down_left : ('a, 'b) cursor_ -> ('a, 'b) cursor_
      val move_down_right : ('a, 'b) cursor_ -> ('a, 'b) cursor_
      val went_left : ('a, 'b) cursor_ -> bool
      val went_right : ('a, 'b) cursor_ -> bool
      val has_value : ('a, 'b) cursor_ -> bool
      val get_value : ('a, 'b) cursor_ -> 'a key_ * 'b elt_
      val compare_keys : t -> t -> int
      val compare : t -> t -> int
      val to_string : t -> string
      val gen2 :
        (?size:int -> Random.State.t -> key) ->
        (?size:int -> Random.State.t -> elt) ->
        ?size:int -> Random.State.t -> t
      val gen : ?size:int -> Random.State.t -> t
    end