Можем ли мы определить в Scala функцию идентификации высшего уровня на уровне типов?

В 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.

Есть ли какое-нибудь умное кодирование, которое поможет? Или это просто невозможно сейчас?

16
задан Miles Sabin 5 September 2010 в 09:41
поделиться