-val compare : t -> t -> int
-val equal : t -> t -> bool
-val mk_nil : t -> t
-val root : t -> t
-val is_root : t -> bool
-val parent : t -> t
-val first_child : t -> t
-val next_sibling : t -> t
-val next_sibling_ctx : t -> t -> t
-val left : t -> t
-val right : t -> t
-val id : t -> int
-val tag : t -> Tag.t
-val text_below : t -> t
-val text_next : t -> t -> t
-val tagged_desc : Tag.t -> t -> t
-val tagged_foll_ctx : Tag.t -> t -> t -> t
-(*
-val select_desc_only : Ptset.Int.t -> t -> t
-val select_foll_only : Ptset.Int.t -> t -> t -> t
-val select_below : Ptset.Int.t -> Ptset.Int.t -> t -> t
-val select_next : Ptset.Int.t -> Ptset.Int.t -> t -> t -> t
-*)
+
+
+type 'a node = private int
+type node_kind = [ `Tree | `Text ]
+val equal : [ `Tree ] node -> [ `Tree ] node -> bool
+val compare : [ `Tree ] node -> [ `Tree ] node -> int
+val dump_node : 'a node -> string
+
+
+val nil : [ `Tree ] node
+val root : [ `Tree ] node
+val size : t -> int
+val is_root : [ `Tree ] node -> bool
+val is_nil : [ `Tree ] node -> bool
+
+val parent : t -> [ `Tree ] node -> [ `Tree ] node
+val first_child : t -> [ `Tree ] node -> [ `Tree ] node
+val first_element : t -> [ `Tree ] node -> [ `Tree ] node
+val tagged_child : t -> Tag.t -> [ `Tree ] node -> [ `Tree ] node
+
+val select_child : t -> Ptset.Int.t -> [ `Tree ] node -> [ `Tree ] node
+
+val next_sibling : t -> [ `Tree ] node -> [ `Tree ] node
+val next_element : t -> [ `Tree ] node -> [ `Tree ] node
+
+val next_sibling_below : t -> [ `Tree ] node -> [ `Tree ] node -> [ `Tree ] node
+val next_element_below : t -> [ `Tree ] node -> [ `Tree ] node -> [ `Tree ] node
+
+val tagged_following_sibling : t -> Tag.t -> [ `Tree ] node -> [ `Tree ] node
+val tagged_following_sibling_below : t -> Tag.t -> [ `Tree ] node -> [ `Tree ] node -> [ `Tree ] node
+
+val select_following_sibling : t -> Ptset.Int.t -> [ `Tree ] node -> [ `Tree ] node
+val select_following_sibling_below : t -> Ptset.Int.t -> [ `Tree ] node -> [ `Tree ] node -> [ `Tree ] node
+
+
+
+val tag : t -> [ `Tree ] node -> Tag.t
+val id : t -> [ `Tree ] node -> int
+
+val tagged_descendant : t -> Tag.t -> [ `Tree ] node -> [`Tree] node
+val select_descendant : t -> Ptset.Int.t -> [ `Tree ] node -> [`Tree] node
+
+val tagged_following_below : t -> Tag.t -> [ `Tree ] node -> [`Tree] node -> [ `Tree ] node
+val select_following_below : t -> Ptset.Int.t -> [ `Tree ] node -> [`Tree] node -> [ `Tree ] node
+