Variances - Scala Documentation

Variance is the correlation of subtyping relationships of complex types and the subtyping relationships of their component types. Scala supports variance annotations of type parameters of generic classes, to allow them to be covariant, contravariant, or invariant if no annotations are used. The use of variance in the type system allows us to make intuitive connections between complex types, whereas the lack of variance can restrict the reuse of a class abstraction.

This is a companion discussion topic for the original entry at

There is a typo in the docs here: trait Function1[-T, R], the R should be +R

good catch! fixed by