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