Я считаю, что можно определить ковариацию (по крайней мере, для объектов) как "способность использовать значение более узкого (вспомогательного) типа вместо значения некоторого более широкого (супер) типа", и что контравариантность - это прямо противоположное этому.
По-видимому, функции Scala являются экземплярами функции [-A1,..., + B] для контравариантных типов параметров A1 и т.д. и ковариантного типа возврата B. В то время как это удобно для подтипирования функций, t означает, что я могу передавать любые супертипы в качестве параметров?
Пожалуйста, сообщите, где я ошибаюсь.