В Scala мы можем определить функцию идентичности на уровне типов для типов с меньшим родом, например:
type Id[A] = A
Можем ли мы определить нечто подобное для типов с более высоким родом? То есть. мы можем заполнить пробелы,
type HKId[A[...]] = ...
чтобы что-то похожее на HKId [List] вернуло нас к конструктору типа List?
Связывание свободных имен в таких вещах, как,
type Foo[X] = List[X]
val l : Foo[Int] = List(1, 2, 3)
Может привести нас к ожиданию, что идентичность более высокого уровня будет выглядеть так:
type HKId[A[X]] = A[X]
но Скалак жалуется, что тип R не найден в RHS.
Есть ли какая-нибудь умная кодировка, которая поможет? Или это просто невозможно сейчас?