--- /dev/null
+(* 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