Reports type variables used as arguments in locations that their variance does not allow, so long as they are not marked as
unchecked. A type variable may have a variance of either covariant (out), contravariant (in), or
invariant (neither out nor in).
The following rules are used to check the type arguments used in attribute and method declarations:
unchecked type arguments are ignored.
- Covariant type arguments may only be used in locations that produce values (for example, return types and block parameters).
- Contravariant type arguments may only be used in locations that consume arguments (for example, parameters and block return types).
- Invariant type arguments may be used in both locations that produce values and consume arguments.
Example:
class Example[in A, out B]
# Covariant type variable 'B' of class 'Example' used in a contravariant position, ...
def call: (B) -> A
end