type t
val pp : Format.formatter -> t -> unit
val show : t -> string
val equal : t -> t -> bool
val compare : t -> t -> int
type 'a data_declaration = {
  1. data_name : string;
  2. data_pp : Format.formatter -> 'a -> unit;
  3. data_compare : 'a -> 'a -> int;
  4. data_hash : 'a -> int;
  5. data_hconsed : bool;
}
type 'a cdata = private {
  1. cin : 'a -> t;
  2. isc : t -> bool;
  3. cout : t -> 'a;
  4. name : string;
}
val declare : 'a data_declaration -> 'a cdata
val hash : t -> int
val name : t -> string
val hcons : t -> t
val morph1 : 'a cdata -> ('a -> 'a) -> t -> t
val ty2 : 'a cdata -> t -> t -> bool
val morph2 : 'a cdata -> ('a -> 'a -> 'a) -> t -> t -> t
val map : 'a cdata -> 'b cdata -> ('a -> 'b) -> t -> t