sig
  type t
  type 'a key
  val new_key :
    ?eq:('-> '-> bool) ->
    ?hash:('-> int) ->
    ?print:('-> string) -> unit -> 'CamlInterface.Univ.key
  val pack : key:'CamlInterface.Univ.key -> '-> CamlInterface.Univ.t
  val unpack :
    key:'CamlInterface.Univ.key -> CamlInterface.Univ.t -> 'a option
  val compatible :
    key:'CamlInterface.Univ.key -> CamlInterface.Univ.t -> bool
  val eq : CamlInterface.Univ.t -> CamlInterface.Univ.t -> bool
  val hash : CamlInterface.Univ.t -> int
  val print : CamlInterface.Univ.t -> string
  val string : string CamlInterface.Univ.key
  val int : int CamlInterface.Univ.key
  val float : float CamlInterface.Univ.key
  val bool : bool CamlInterface.Univ.key
  val unit : unit CamlInterface.Univ.key
  val pair :
    'CamlInterface.Univ.key ->
    'CamlInterface.Univ.key -> ('a * 'b) CamlInterface.Univ.key
  val list : 'CamlInterface.Univ.key -> 'a list CamlInterface.Univ.key
  val array : 'CamlInterface.Univ.key -> 'a array CamlInterface.Univ.key
end