В 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]
но scalac жалуется, что тип X не найден в RHS.
Есть ли какая-то умная кодировка, которая будет делать трюк? Или это просто невозможно сейчас?