Проблема:
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
не работает, поскольку тип не совпадает, а _[_]
даже не является допустимым выражением типа.
def high(h: High[F] forSome {type F[O] <: UpperBound[O] }) = ???
? - person Dmytro Mitin   schedule 05.04.2020List[X[A]] forSome { type A }
иList[X[A] forSome { type A }]
разные. Первый состоит из элементов, имеющих типыX[A]
, гдеA
произвольный, но одинаковый для всех элементов. Последний состоит из элементов, имеющих типыX[A]
, гдеA
произволен и может быть разным для разных элементов. - person Dmytro Mitin   schedule 06.04.2020