functor (T : sig val name : string end->   sig type t val ty : Type.Abstract.t Type.ty end