sig
  type +'a tree
  val empty : 'a BatAvlTree.tree
  val is_empty : 'a BatAvlTree.tree -> bool
  val make_tree :
    'a BatAvlTree.tree -> 'a -> 'a BatAvlTree.tree -> 'a BatAvlTree.tree
  val create :
    'a BatAvlTree.tree -> 'a -> 'a BatAvlTree.tree -> 'a BatAvlTree.tree
  val height : 'a BatAvlTree.tree -> int
  val left_branch : 'a BatAvlTree.tree -> 'a BatAvlTree.tree
  val right_branch : 'a BatAvlTree.tree -> 'a BatAvlTree.tree
  val root : 'a BatAvlTree.tree -> 'a
  val singleton_tree : 'a -> 'a BatAvlTree.tree
  val split_leftmost : 'a BatAvlTree.tree -> 'a * 'a BatAvlTree.tree
  val split_rightmost : 'a BatAvlTree.tree -> 'a * 'a BatAvlTree.tree
  val concat : 'a BatAvlTree.tree -> 'a BatAvlTree.tree -> 'a BatAvlTree.tree
  val iter : ('a -> unit) -> 'a BatAvlTree.tree -> unit
  val fold : ('a -> 'b -> 'b) -> 'a BatAvlTree.tree -> 'b -> 'b
  val enum : 'a BatAvlTree.tree -> 'a BatEnum.t
  val check : 'a BatAvlTree.tree -> bool
  val check_height_cache : 'a BatAvlTree.tree -> bool
  val check_height_balance : 'a BatAvlTree.tree -> bool
end