sig
  type ('k, 'v) t =
      Empty
    | Node of ('k, 'v) Avltree.t * 'k * 'v * int * ('k, 'v) Avltree.t
    | Leaf of 'k * 'v
  val empty : ('k, 'v) Avltree.t
  val invariant : ('k, 'v) Avltree.t -> compare:('-> '-> int) -> unit
  val add :
    ?replace:bool ->
    ('k, 'v) Avltree.t ->
    compare:('-> '-> int) ->
    added:bool Pervasives.ref -> key:'-> data:'-> ('k, 'v) Avltree.t
  val first : ('k, 'v) Avltree.t -> ('k * 'v) option
  val last : ('k, 'v) Avltree.t -> ('k * 'v) option
  val find :
    ('k, 'v) Avltree.t -> compare:('-> '-> int) -> '-> 'v option
  val mem : ('k, 'v) Avltree.t -> compare:('-> '-> int) -> '-> bool
  val remove :
    ('k, 'v) Avltree.t ->
    removed:bool Pervasives.ref ->
    compare:('-> '-> int) -> '-> ('k, 'v) Avltree.t
  val fold :
    ('k, 'v) Avltree.t -> init:'-> f:(key:'-> data:'-> '-> 'a) -> 'a
  val iter : ('k, 'v) Avltree.t -> f:(key:'-> data:'-> unit) -> unit
end