Вы не указали, каким должен быть параметр A
, поэтому компилятор не может даже начать поиск неявного свидетельства, потому что он не знает тип вещи, которую должен найти.
Это ведет себя полностью, как и ожидалось:
type PartiallyAppliedEither[A] = Either[String, A]
def checkTypeEquality1(implicit ev: PartiallyAppliedEither[_] =:= Either[String, _]) = 1
checkTypeEquality1 // compiles
def checkTypeEquality2[A](implicit ev: PartiallyAppliedEither[A] =:= Either[String, A]) = 1
checkTypeEquality2[Int] // compiles
def checkTypeEquality3[A](implicit ev: PartiallyAppliedEither[A] =:= Either[String, _]) = 1
checkTypeEquality3[Int] // doesn't compile, because it shouldn't.
Последний не компилируется, потому что если бы он это сделал, это означало бы, что каждый тип равен любому другому типу, но это не так.