In order for the Partition concept to be instantiated, it requires conceptual context from the content environment of the Recursive_Quick_Sort content. If nested generics were allowed in Ada, we could partially instantiate the Recursive_Quick_Sort body as follows:
procedure body RQS_Partition is new Recursive_Quick_Sort(Partition => Partition (Element => Sort.Element,
"<=" => Sort."<=",
El_Sequence_Ind => Sort.El_Sequence_Ind,
El_Sequence => Sort.El_Sequence,
{instantiation of El_Sequence ops}));
Ada does not allow this form of generic "nesting", and we will not suggest language changes to allow such nesting at this point. We therefore must first fully instantiate the Partition concept and then provide the instantiation as a parameter to Recursive_Quick_Sort.
Nested generics would give us the ability to "propagate" the generic formal parameters Element and El_Sequence (with their associated operations) from the generic procedure Recursive_Quick_Sort to the generic procedure Partition, without having to instantiate Recursive_Quick_Sort.