& String] // ok
B[A[Int]] <:< B[A[Int & String]] // not ok
Почему так?
Потому что B контравариантен по Y
Спасибо. А можно чуть подробнее?
B[A[Int]] <:< B[A[Int & String]] при условии, что A[Int & String] <:< A[Int]
Можно интуитивно понимать, что минус переворачивает отношение между тайп-параметрами
Представим, что у вас есть две убывающие (невозрастающие функции) A и B и есть два положительных числа i и s меньше единицы, например i = 1/ 2, s = 1/3 , вам известно, что i * s <= i следовательно A(i) <= A(i * s) следовательно B(A(i * s)) <= B(A(i))
Обсуждают сегодня