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