sig
  type constructor = string
  type type_name = string
  type record_field = string
  type tag = int
  type representation = PPrintEngine.document
  val variant :
    type_name -> constructor -> tag -> representation list -> representation
  val record :
    type_name -> (record_field * representation) list -> representation
  val tuple : representation list -> representation
  val string : string -> representation
  val int : int -> representation
  val int32 : int32 -> representation
  val int64 : int64 -> representation
  val nativeint : nativeint -> representation
  val float : float -> representation
  val char : char -> representation
  val bool : bool -> representation
  val option : ('-> representation) -> 'a option -> representation
  val list : ('-> representation) -> 'a list -> representation
  val array : ('-> representation) -> 'a array -> representation
  val ref : ('-> representation) -> 'a ref -> representation
  val unknown : type_name -> '-> representation
end