In addition to the various language-defined classes of types, types can be grouped into derivation classes.
Every type is either a specific type, a class-wide type, or a universal type.
Class-wide types have no primitive subprograms of their own. If S is a first subtype, then S'Class is a first subtype. As with class-wide types, if a formal parameter is of a universal type, then an actual parameter of any type in the corresponding class is acceptable. The set of values of a universal type is the undiscriminated union of the set of values possible for any definable type in the associated class. Like class-wide types, universal types have no primitive subprograms of their own.