 
 
 
baltree: basic balanced binary trees 
- 
 This module implements balanced ordered binary trees.
   All operations over binary trees are applicative (no side-effects).
   The set and map modules are based on this module.
   This modules gives a more direct access to the internals of the
   binary tree implementation than the set and map abstractions,
   but is more delicate to use and not as safe. For advanced users only. 
type 'a t = Empty | Node of 'a t * 'a * 'a t * int
- 
 The type of trees containing elements of type 'a.
           Empty is the empty tree (containing no elements). 
type 'a contents = Nothing | Something of 'a
- 
 Used with the functions modify and split, to represent
           the presence or the absence of an element in a tree. 
value add: ('a -> int) -> 'a -> 'a t -> 'a t
- 
 add f x t inserts the element x into the tree t.
           f is an ordering function: f y must return 0 if
           x and y are equal (or equivalent), a negative integer if
           x is smaller than y, and a positive integer if x is
           greater than y. The tree t is returned unchanged if
           it already contains an element equivalent to x (that is,
           an element y such that f y is 0).
           The ordering f must be consistent with the orderings used
           to build t with add, remove, modify or split
           operations. 
value contains: ('a -> int) -> 'a t -> bool
- 
 contains f t checks whether t contains an element
           satisfying f, that is, an element x such
           that f x is 0. f is an ordering function with the same
           constraints as for add. It can be coarser (identify more
           elements) than the orderings used to build t, but must be
           consistent with them. 
value find: ('a -> int) -> 'a t -> 'a
- 
 Same as contains, except that find f t returns the element x
           such that f x is 0, or raises Not_found if none has been
           found. 
value remove: ('a -> int) -> 'a t -> 'a t
- 
 remove f t removes one element x of t such that f x is 0.
           f is an ordering function with the same constraints as for add.
           t is returned unchanged if it does not contain any element
           satisfying f. If several elements of t satisfy f,
           only one is removed. 
value modify: ('a -> int) -> ('a contents -> 'a contents) -> 'a t -> 'a t
- 
 General insertion/modification/deletion function.
           modify f g t searchs t for an element x satisfying the
           ordering function f. If one is found, g is applied to
           Something x; if g returns Nothing, the element x
           is removed; if g returns Something y, the element y
           replaces x in the tree. (It is assumed that x and y
           are equivalent, in particular, that f y is 0.)
           If the tree does not contain any x satisfying f,
           g is applied to Nothing; if it returns Nothing,
           the tree is returned unchanged; if it returns Something x,
           the element x is inserted in the tree. (It is assumed that
           f x is 0.) The functions add and remove are special cases
           of modify, slightly more efficient. 
value split: ('a -> int) -> 'a t -> 'a t * 'a contents * 'a t
- 
 split f t returns a triple (less, elt, greater) where
           less is a tree containing all elements x of t such that
           f x is negative, greater is a tree containing all
           elements x of t such that f x is positive, and elt
           is Something x if t contains an element x such that
           f x is 0, and Nothing otherwise. 
value compare: ('a -> 'a -> int) -> 'a t -> 'a t -> int
- 
 Compare two trees. The first argument f is a comparison function
           over the tree elements: f e1 e2 is zero if the elements e1 and 
           e2 are equal, negative if e1 is smaller than e2,
           and positive if e1 is greater than e2. compare f t1 t2
           compares the fringes of t1 and t2 by lexicographic extension
           of f. 
 
 
