The name
is used for debug information only in case of Broken_dependency.
The required
is to handle dependencies between generics at runtime.
Example:
if X
is the module given to build a generic computation G
that depends on three
other computation A,B,C
then X.required shall be A.ident ; B.ident ; C.ident
Extending an existing generic for a particular type name
The use of first class modules there is essentially because we cannot talk about a variable of kind * -> k val register1 : 'a 't Typerep.t -> ('a computation -> 'a 't computation) -> unit ...