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