sig
  type t
  type key
  type elt
  type cursor
  type 'a result
  type 'k key_ = key
  type 'e elt_ = elt
  type ('k, 'e) map = t
  type ('a, 'k, 'v) result_ = 'a 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_ = 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 :
    Reins.Maps.MonoMapSig.t -> Reins.Maps.MonoMapSig.t -> int
  val compare : Reins.Maps.MonoMapSig.t -> Reins.Maps.MonoMapSig.t -> int
  val to_string : Reins.Maps.MonoMapSig.t -> string
  val gen2 :
    (?size:int -> Random.State.t -> Reins.Maps.MonoMapSig.key) ->
    (?size:int -> Random.State.t -> Reins.Maps.MonoMapSig.elt) ->
    ?size:int -> Random.State.t -> Reins.Maps.MonoMapSig.t
end