A generic or polymorphic subprogram is one that takes parameters of different types on different activations
Overloaded subprograms provide ad hoc polymorphism
A subprogram that takes a generic parameter that is used in a type expression that describes the type of the parameters of the subprogram provides parametric polymorphism