S
f - параметр метода, то есть он в контравариантной позиции
A => B - Параметр функции (A) тоже в контравариантной позиции
Таким образом
f: A => B - тут A в дважды контравариантной позиции, то есть в ковариантной позицииSize: a a a
S
f: A => B - тут A в дважды контравариантной позиции, то есть в ковариантной позицииS
χλ
S
IK
case class Sample[+A]() {
def method[B](f: A => B) = ???
}
val f: Nothing => Int = ???
Sample[Int]().method[Int](f)χλ
??? – это способ не писать тело функции, дабы проверить type checking?IK
S
Int => Int используется там, где ожидается Nothing => Int - так можно из-за контравариантности. В вашем коде Nothing => Int используется там, где ожидается Int => Int - так нельзяIK
S
??? - метод, возвращающий Nothing.Oℕ
f: Int => Intf: PosInt => Intf : A => B вы не передали, она так же является функцией Nothing => B, т.е. функцией с которой снимается необходимость обрабатывать что-либо, и нет никакого противоречия, в том чтобы передать её в метод, принимающий такой аргументχλ
Oℕ
Oℕ
Oℕ
GP
S
GP
S
S