В 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]
будет выглядеть идентичность более высокого уровня
type HKId[A[X]] = A[X]
, но Скалак жалуется, что тип R не найден в RHS.
Есть ли какое-нибудь умное кодирование, которое поможет? Или это просто невозможно сейчас?