`sig
module OTProduct :
functor (X : Sig.ORDERED_TYPE) ->
functor (Y : Sig.ORDERED_TYPE) ->
sig type t = X.t * Y.t val compare : t -> t -> int end
module HTProduct :
functor (X : Sig.HASHABLE) ->
functor (Y : Sig.HASHABLE) ->
sig
type t = X.t * Y.t
val hash : t -> int
val equal : t -> t -> bool
end
module CMPProduct :
functor (X : Sig.COMPARABLE) ->
functor (Y : Sig.COMPARABLE) ->
sig
type t = X.t * Y.t
val compare : t -> t -> int
val hash : t -> int
val equal : t -> t -> bool
end
module DataV :
functor (L : sig type t end) ->
functor (V : Sig.COMPARABLE) ->
sig
type data = L.t
and label = V.t
and t = Util.DataV.data Pervasives.ref * V.t
val compare : Util.DataV.t -> Util.DataV.t -> int
val hash : Util.DataV.t -> int
val equal : Util.DataV.t -> Util.DataV.t -> bool
val create : Util.DataV.data -> V.t -> Util.DataV.t
val label : Util.DataV.t -> V.t
val data : Util.DataV.t -> Util.DataV.data
val set_data : Util.DataV.t -> Util.DataV.data -> unit
end
end`