sig   type ('a, 'b, 'c) poly   val instantiate :     'Type.t -> 'Type.t -> 'Type.t -> ('a, 'b, 'c) poly Type.t * bool   val is_instance_of : 'Type.t -> bool   val get_instance :     ('a, 'b, 'c) poly Type.t -> 'Type.t * 'Type.t * 'Type.t   module Make :     functor (T1 : S) (T2 : S) (T3 : S->       sig         type t = (T1.t, T2.t, T3.t) poly         val ty : t Type.t         val name : string         val descr : t Descr.t         val packed_descr : Structural_descr.pack         val reprs : t list         val equal : t -> t -> bool         val compare : t -> t -> int         val hash : t -> int         val pretty_code : Format.formatter -> t -> unit         val internal_pretty_code :           Type.precedence -> Format.formatter -> t -> unit         val pretty : Format.formatter -> t -> unit         val varname : t -> string         val mem_project : (Project_skeleton.t -> bool) -> t -> bool         val copy : t -> t       end end