Why generally co/contravariance are needed may become clearer by reading this:
https://kotlinlang.org/docs/reference/generics.html#variance
Basically its: Just because an A extends/implements B, you cannot automatically treat a variable with a C<A> like it's a C<B>, but instead have to explicitly tell the compiler, when this would make sence.