Вдохновленный Реальными примерами ко- и контравариантности в Scala Я подумал, что лучше будет спросить:
При проектировании библиотеки есть ли определенный набор вопросов, которые вы должны задать себе, когда определить, должен ли параметр типа быть ковариантным или контравариантным? Или вы должны сделать все неизменным, а затем изменить его по мере необходимости?