While a type parameter’s constraint typically represents a set of types, at
compile time the type parameter stands for a single type – the type provided
as a type argument by the calling code. If the type argument’s type isn’t
allowed by the type parameter’s constraint, the code won’t compile.
Keep in mind that a type parameter must support all the operations the generic
code is performing on it. For example, if your function’s code were to try to
perform string operations (such as indexing) on a type parameter whose
constraint included numeric types, the code wouldn’t compile.