That does look like it raises covariance versus contravariance issues.

Here is why: an array is actually a function which maps an integer index to a value.

The element type of an array therefore a return value type of this function.

A "function returning SUP" is not a supertype of "function returning SUB".