let add t ~low ~high ~data =
let rec aux lo hi elt = function
| Empty -> create Empty lo hi elt Empty
| Node n ->
let c = interval_compare lo hi n.lo n.hi in
if c <= 0 then bal (aux lo hi elt n.left) n.lo n.hi n.elt n.right
else bal n.left n.lo n.hi n.elt (aux lo hi elt n.right)
in
aux low high data t