Дисперсия (ковариация и контравариантность) в функциях Скалы
Я погружаюсь в концепции FP, используя Scala. Я думаю, что я наконец понял, что такое ковариация и контравариантность и почему типы функций являются контравариантными в своих типах аргументов и ковариантными в своих типах возвращаемых значений. Но есть еще кое-что, чего я не понимаю. В Скале List[+A]
имеет предлог (+:
) метод, который принимает S
где S >: A
, Если тип был A
компилятор выдаст ошибку: ковариантный параметр в контравариантной позиции, я не понимаю, почему факт объявления List[+A]
марки A
ковариантный в определении функции. Насколько я понимаю, ковариация и контравариантность относятся к более сложным типам, чем A
монады или функции.
Список Scala: http://www.scala-lang.org/api/current/index.html