functor
  (D : sig
         val name : 'Type.t -> string
         val value_name : string
         type 'a t
         val repr : '-> 'Type.Polymorphic.t
         val pp :
           (Type.precedence -> Format.formatter -> '-> unit) ->
           Type.precedence ->
           Format.formatter -> 'Type.Polymorphic.t -> unit
       end->
  sig
    type 'a poly = 'D.t
    val instantiate : 'a t -> 'a poly t
    val is_instance_of : 'a t -> bool
    val get_instance : 'a poly t -> 'a t
  end