История изменений
Исправление den73, (текущая версия) :
если S <: T, то List<S> <: List<T> при отсутствии мутабельности, иначе между ними никакого отношения нет, так называемая подтипизация в глубину;
Здесь ты упустил случай, когда контейнер только читается. Т.е. он мутабельный, но мы в него не пишем. В грешном мире ещё пока не все контейнеры могут быть иммутабельными. И я думаю, упустил по тому, что сузил понимание вариантности до конструкторов типов. А на самом-то деле оно не обязано быть столь узким.
если S <: T, P - объект с полем f типа T, а Q - объект с полем f типа S, то Q <: P, так называемая подтипизация в ширину.
А вот это я не совсем понял, типы Т и S относятся к полю f или к самим объектами Q и P? Видимо, к f. А каковы тогда типы Q и P? Или ты имел в виду, что Q и P - это типы ,которые отличаются только типом поля f? Если последнее, то такого случая у меня не было. Откуда это, из какого языка?
Хаскелистов потом можно будет позвать. Надо сначала понять, а уж испортить понимание теоркатом никогда не поздно :)
Исходная версия den73, :
если S <: T, то List<S> <: List<T> при отсутствии мутабельности, иначе между ними никакого отношения нет, так называемая подтипизация в глубину;
Здесь ты упустил случай, когда контейнер только читается. Т.е. он мутабельный, но мы в него не пишем. В грешном мире ещё пока не все контейнеры могут быть иммутабельными.
если S <: T, P - объект с полем f типа T, а Q - объект с полем f типа S, то Q <: P, так называемая подтипизация в ширину.
А вот это я не совсем понял, типы Т и S относятся к полю f или к самим объектами Q и P? Видимо, к f. А каковы тогда типы Q и P? Или ты имел в виду, что Q и P - это типы ,которые отличаются только типом поля f? Если последнее, то такого случая у меня не было. Откуда это, из какого языка?
Хаскелистов потом можно будет позвать. Надо сначала понять, а уж испортить понимание теоркатом никогда не поздно :)