Проблема:
trait UpperBound[O]
trait High[F[O] <: UpperBound[O]]
def canEqual(that :Any) = that.isInstanceOf[High[_]]
def high(h :High[_]) = ???
Не компилируется, потому что scalac видит тип _
вместо ожидаемого конструктора типа. Как это исправить, в идеале без написания романа?
Оригинальный вопрос (до правок в ответ на ответ Дмитрия) имел:
def canEqual(that :Any) = that.isInstanceOf[High[m forSome { type m[O] <: UpperBound[O] }]]
def high(h :High[m forSome { type m[O] <: UpperBound[O] }] = ???
Есть ли более короткий способ написания двух вышеупомянутых методов используя какое-нибудь подстановочное выражение? Простое использование _
в позиции параметра типа High
не работает, поскольку тип не совпадает, а _[_]
даже не является допустимым выражением типа.