(* Quite useful, taken from CDuce, cduce/misc/custom.ml *) module type Set = sig include Set.S val hash : t -> int val equal : t -> t -> bool end module type T = sig type t (* Debugging *) val dump : Format.formatter -> t -> unit val check : t -> unit (* Check internal invariants *) (* Data structures *) val equal : t -> t -> bool val hash : t -> int val compare :t -> t -> int val print : Format.formatter -> t -> unit end module type TAG = sig include T val attribute : t val pcdata : t val to_string : t -> string val tag : string -> t end module type BINARY_TREE = functor (Tag:TAG) -> sig include T module Tag : TAG with type t = Tag.t val parse_xml_uri : string -> t val parse_xml_string : string -> t val root : t -> t val is_string : t -> bool val is_node : t -> bool val is_nil : t -> bool val string : t -> string val first_child : t -> t val next_sibling : t -> t val parent : t -> t val id : t -> int val tag : t -> Tag.t val print_xml : out_channel -> t -> unit val size : t -> int*int*int*int end module type BINARY_TREE_S = sig include T module Tag : TAG val parse_xml_uri : string -> t val parse_xml_string : string -> t val root : t -> t val is_string : t -> bool val is_node : t -> bool val is_nil : t -> bool val string : t -> string val first_child : t -> t val next_sibling : t -> t val parent : t -> t val id : t -> int val tag : t -> Tag.t val print_xml : out_channel -> t -> unit val dump : Format.formatter -> t -> unit val size : t -> int*int*int*int end