[TOP / ABSTRACT] Thing ↓ Animal ↓ Human ↓ Programmer ↓ Scala Dev [BOTTOM / SPECIFIC]
Covariance: Accept T or lower.
I asked for a [+Human]
, I will accept any of these: [Human, Programmer, Scala Dev]
.
Contravariance: Accept T or higher.
I asked for a [-Human]
, I will accept any of these: [Thing, Animal, Human]
.
Inariance: Accept T and only T.
Coercion.
Coercing a type up/down the type hierarchy means checking that a type's super/sub type passes type constraints. For example, a covariant function needs a Human
but we've only got a Programmer
, that's ok, the compiler can coerce the Programmer
into Human
to satisfy typing constraints.