Я прочитал существующие вопросы о том, что определения типов с параметризованными границами недопустимы внутри блоков (или что-то в этом роде), но это не помогает мне в моей проблеме:
type Cons[X]
class Higher[C[X] <: Cons[X]]
type AnyHigher = Higher[C] forSome { type C[X] <: Cons[X] }
Seq[AnyHigher]().map { h => h }
компилятор:
can't existentially abstract over parameterized type C
Seq[AnyHigher]().map { h => h }
Тип элемента входной коллекции значения не имеет, проблема заключается только в возвращаемом типе функции отображения. Есть ли способ обойти это? Я пробовал разные рефакторинги: превращал функцию сопоставления в метод, обманывал, делая код универсальным и выполняя его с параметрами AnyHigher
, писал собственную рекурсию, но ничего не помогало.
LUB
всехHigher
экземпляров. И вся «параметризация с помощью конструктора типов» является абсолютно центральной для проекта, я никак не могу изменить определение. В худшем случае я введу запечатанный непараметризованный тип с методом приведения к экзистенциальному типу. - person Turin   schedule 19.11.2020Higher
. , но этоConst
, которая является фактической переменной и полезной нагрузкой всего проекта. - person Turin   schedule 23.11.2020