sig
  module type Map_ =
    sig
      type 'a key_
      type 'a elt_
      type ('a, 'b) map
      type ('a, 'b, 'c) result_
      val empty : ('a, 'b) Reins.Maps.Map_.map
      val is_empty : ('a, 'b) Reins.Maps.Map_.map -> bool
      val mem :
        'Reins.Maps.Map_.key_ ->
        ('a, 'b) Reins.Maps.Map_.map ->
        (bool, 'a, 'b) Reins.Maps.Map_.result_
      val add :
        'Reins.Maps.Map_.key_ ->
        'Reins.Maps.Map_.elt_ ->
        ('a, 'b) Reins.Maps.Map_.map -> ('a, 'b) Reins.Maps.Map_.map
      val singleton :
        'Reins.Maps.Map_.key_ ->
        'Reins.Maps.Map_.elt_ -> ('a, 'b) Reins.Maps.Map_.map
      val remove :
        'Reins.Maps.Map_.key_ ->
        ('a, 'b) Reins.Maps.Map_.map -> ('a, 'b) Reins.Maps.Map_.map
      val find :
        'Reins.Maps.Map_.key_ ->
        ('a, 'b) Reins.Maps.Map_.map ->
        ('Reins.Maps.Map_.elt_, 'a, 'b) Reins.Maps.Map_.result_
      val min_key :
        ('a, 'b) Reins.Maps.Map_.map ->
        ('Reins.Maps.Map_.key_, 'a, 'b) Reins.Maps.Map_.result_
      val max_key :
        ('a, 'b) Reins.Maps.Map_.map ->
        ('Reins.Maps.Map_.key_, 'a, 'b) Reins.Maps.Map_.result_
      val min_keyval :
        ('a, 'b) Reins.Maps.Map_.map ->
        ('Reins.Maps.Map_.key_ * 'Reins.Maps.Map_.elt_, 'a, 'b)
        Reins.Maps.Map_.result_
      val max_keyval :
        ('a, 'b) Reins.Maps.Map_.map ->
        ('Reins.Maps.Map_.key_ * 'Reins.Maps.Map_.elt_, 'a, 'b)
        Reins.Maps.Map_.result_
      val cardinal : ('a, 'b) Reins.Maps.Map_.map -> int
      val iter :
        ('Reins.Maps.Map_.key_ -> 'Reins.Maps.Map_.elt_ -> unit) ->
        ('a, 'b) Reins.Maps.Map_.map -> unit
      val fold :
        ('-> 'Reins.Maps.Map_.key_ -> 'Reins.Maps.Map_.elt_ -> 'a) ->
        '-> ('b, 'c) Reins.Maps.Map_.map -> 'a
      val map :
        ('Reins.Maps.Map_.elt_ -> 'Reins.Maps.Map_.elt_) ->
        ('c, 'a) Reins.Maps.Map_.map -> ('c, 'b) Reins.Maps.Map_.map
      val mapi :
        ('Reins.Maps.Map_.key_ ->
         'Reins.Maps.Map_.elt_ -> 'Reins.Maps.Map_.elt_) ->
        ('a, 'b) Reins.Maps.Map_.map -> ('a, 'c) Reins.Maps.Map_.map
      val union :
        ('Reins.Maps.Map_.key_ ->
         'Reins.Maps.Map_.elt_ ->
         'Reins.Maps.Map_.elt_ -> 'Reins.Maps.Map_.elt_) ->
        ('a, 'b) Reins.Maps.Map_.map ->
        ('a, 'b) Reins.Maps.Map_.map -> ('a, 'b) Reins.Maps.Map_.map
      val inter :
        ('Reins.Maps.Map_.key_ ->
         'Reins.Maps.Map_.elt_ ->
         'Reins.Maps.Map_.elt_ -> 'Reins.Maps.Map_.elt_) ->
        ('a, 'b) Reins.Maps.Map_.map ->
        ('a, 'b) Reins.Maps.Map_.map -> ('a, 'b) Reins.Maps.Map_.map
      val diff :
        ('Reins.Maps.Map_.key_ ->
         'Reins.Maps.Map_.elt_ -> 'Reins.Maps.Map_.elt_ -> bool) ->
        ('a, 'b) Reins.Maps.Map_.map ->
        ('a, 'b) Reins.Maps.Map_.map -> ('a, 'b) Reins.Maps.Map_.map
      val well_formed : ('a, 'b) Reins.Maps.Map_.map -> bool
      val of_result : ('a, 'b, 'c) Reins.Maps.Map_.result_ -> 'a
      type ('a, 'b) cursor_
      val to_cursor :
        ('a, 'b) Reins.Maps.Map_.map -> ('a, 'b) Reins.Maps.Map_.cursor_
      val from_cursor :
        ('a, 'b) Reins.Maps.Map_.cursor_ -> ('a, 'b) Reins.Maps.Map_.map
      val at_top : ('a, 'b) Reins.Maps.Map_.cursor_ -> bool
      val at_left : ('a, 'b) Reins.Maps.Map_.cursor_ -> bool
      val at_right : ('a, 'b) Reins.Maps.Map_.cursor_ -> bool
      val move_up :
        ('a, 'b) Reins.Maps.Map_.cursor_ -> ('a, 'b) Reins.Maps.Map_.cursor_
      val move_down_left :
        ('a, 'b) Reins.Maps.Map_.cursor_ -> ('a, 'b) Reins.Maps.Map_.cursor_
      val move_down_right :
        ('a, 'b) Reins.Maps.Map_.cursor_ -> ('a, 'b) Reins.Maps.Map_.cursor_
      val went_left : ('a, 'b) Reins.Maps.Map_.cursor_ -> bool
      val went_right : ('a, 'b) Reins.Maps.Map_.cursor_ -> bool
      val has_value : ('a, 'b) Reins.Maps.Map_.cursor_ -> bool
      val get_value :
        ('a, 'b) Reins.Maps.Map_.cursor_ ->
        'Reins.Maps.Map_.key_ * 'Reins.Maps.Map_.elt_
    end
  module type PolyMapSig =
    sig
      type ('a, 'b) t
      type 'a key = 'a
      type 'a elt = 'a
      type ('a, 'b) cursor
      type ('a, 'b, 'c) result
      type 'a key_ = 'a
      type 'a elt_ = 'a
      type ('a, 'b) map = ('a, 'b) t
      type ('a, 'b, 'c) result_ = ('a, 'b, 'c) 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_ = ('a, 'b) 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 gen2 :
        (?size:int -> Random.State.t -> 'a key_) ->
        (?size:int -> Random.State.t -> 'b elt_) ->
        ?size:int -> Random.State.t -> ('a, 'b) map
      val to_string : ('-> '-> string) -> ('a, 'b) map -> string
      val compare :
        ('-> '-> int) ->
        ('-> '-> int) ->
        ('a, 'b) Reins.Maps.PolyMapSig.t ->
        ('a, 'b) Reins.Maps.PolyMapSig.t -> int
      val compare_keys :
        ('-> '-> int) ->
        ('a, 'b) Reins.Maps.PolyMapSig.t ->
        ('a, 'b) Reins.Maps.PolyMapSig.t -> int
    end
  module type PolyMapSigStd =
    sig
      type ('a, 'b) t
      type 'a key = 'a
      type 'a elt = 'a
      type ('a, 'b) cursor
      type ('a, 'b, 'c) result = 'a
      type 'a key_ = 'a
      type 'a elt_ = 'a
      type ('a, 'b) map = ('a, 'b) t
      type ('a, 'b, 'c) result_ = ('a, 'b, 'c) 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_ = ('a, 'b) 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 gen2 :
        (?size:int -> Random.State.t -> 'a key_) ->
        (?size:int -> Random.State.t -> 'b elt_) ->
        ?size:int -> Random.State.t -> ('a, 'b) map
      val to_string : ('-> '-> string) -> ('a, 'b) map -> string
      val compare :
        ('-> '-> int) ->
        ('-> '-> int) -> ('a, 'b) t -> ('a, 'b) t -> int
      val compare_keys : ('-> '-> int) -> ('a, 'b) t -> ('a, 'b) t -> int
    end
  module type MonoKeyMapSig =
    sig
      type 'a t
      type key
      type 'a elt = 'a
      type 'a cursor
      type ('a, 'b) result
      type 'a key_ = key
      type 'a elt_ = 'a
      type ('a, 'b) map = 'b t
      type ('a, 'b, 'c) result_ = ('a, 'c) 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_ = 'b 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 :
        'Reins.Maps.MonoKeyMapSig.t -> 'Reins.Maps.MonoKeyMapSig.t -> int
      val compare :
        ('-> '-> int) ->
        'Reins.Maps.MonoKeyMapSig.t -> 'Reins.Maps.MonoKeyMapSig.t -> int
      val to_string :
        ('-> string) -> 'Reins.Maps.MonoKeyMapSig.t -> string
      val gen2 :
        (?size:int -> Random.State.t -> Reins.Maps.MonoKeyMapSig.key) ->
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'Reins.Maps.MonoKeyMapSig.t
    end
  module type MonoKeyMapSigStd =
    sig
      type 'a t
      type key
      type 'a elt = 'a
      type 'a cursor
      type ('a, 'b) result = 'a
      type 'a key_ = key
      type 'a elt_ = 'a
      type ('a, 'b) map = 'b t
      type ('a, 'b, 'c) result_ = ('a, 'c) 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_ = 'b 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 : 'a t -> 'a t -> int
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
      val to_string : ('-> string) -> 'a t -> string
      val gen2 :
        (?size:int -> Random.State.t -> key) ->
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'a t
    end
  module type MonoKeyMapSigFnStd =
    functor (C : Types.Mono.Comparable->
      sig
        type 'a t
        type key = C.t
        type 'a elt = 'a
        type 'a cursor
        type ('a, 'b) result = 'a
        type 'a key_ = key
        type 'a elt_ = 'a
        type ('a, 'b) map = 'b t
        type ('a, 'b, 'c) result_ = ('a, 'c) 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_ = 'b 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 : 'a t -> 'a t -> int
        val compare : ('-> '-> int) -> 'a t -> 'a t -> int
        val to_string : ('-> string) -> 'a t -> string
        val gen2 :
          (?size:int -> Random.State.t -> key) ->
          (?size:int -> Random.State.t -> 'a) ->
          ?size:int -> Random.State.t -> 'a t
      end
  module type GenKeyMapSig =
    sig
      type 'a t
      type key
      type 'a elt = 'a
      type 'a cursor
      type ('a, 'b) result
      type 'a key_ = key
      type 'a elt_ = 'a
      type ('a, 'b) map = 'b t
      type ('a, 'b, 'c) result_ = ('a, 'c) 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_ = 'b 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 : 'a t -> 'a t -> int
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
      val to_string : ('-> string) -> 'a t -> string
      val gen2 :
        (?size:int -> Random.State.t -> key) ->
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'a t
      val gen1 :
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'a t
    end
  module type GenKeyMapSigStd =
    sig
      type 'a t
      type key
      type 'a elt = 'a
      type 'a cursor
      type ('a, 'b) result = 'a
      type 'a key_ = key
      type 'a elt_ = 'a
      type ('a, 'b) map = 'b t
      type ('a, 'b, 'c) result_ = ('a, 'c) 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_ = 'b 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 : 'a t -> 'a t -> int
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
      val to_string : ('-> string) -> 'a t -> string
      val gen2 :
        (?size:int -> Random.State.t -> key) ->
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'a t
      val gen1 :
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'a t
    end
  module type GenKeyMapSigFnStd =
    functor (C : Types.Mono.ArbitraryComparable->
      sig
        type 'a t
        type key = C.t
        type 'a elt = 'a
        type 'a cursor
        type ('a, 'b) result = 'a
        type 'a key_ = key
        type 'a elt_ = 'a
        type ('a, 'b) map = 'b t
        type ('a, 'b, 'c) result_ = ('a, 'c) 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_ = 'b 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 : 'a t -> 'a t -> int
        val compare : ('-> '-> int) -> 'a t -> 'a t -> int
        val to_string : ('-> string) -> 'a t -> string
        val gen2 :
          (?size:int -> Random.State.t -> key) ->
          (?size:int -> Random.State.t -> 'a) ->
          ?size:int -> Random.State.t -> 'a t
        val gen1 :
          (?size:int -> Random.State.t -> 'a) ->
          ?size:int -> Random.State.t -> 'a t
      end
  module type MonoMapSig =
    sig
      type t
      type key
      type elt
      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 :
        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
  module type MonoMapSigFn =
    functor (K : Types.Mono.Comparable->
      functor (V : Types.Mono.Comparable->
        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
        end
  module type MonoMapSigFnStd =
    functor (K : Types.Mono.Comparable->
      functor (V : Types.Mono.Comparable->
        sig
          type t
          type key = K.t
          type elt = V.t
          type cursor
          type 'a result = 'a
          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
        end
  module type GenMapSig =
    sig
      type t
      type key
      type elt
      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
  module type GenMapSigFn =
    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
  module type GenMapSigFnStd =
    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 = 'a
          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
end