scala - tipos - ¿Para qué sirven las proyecciones de tipo?
q es la escala (2)
Las proyecciones de un tipo de cosa se pueden usar para una aplicación de tipo parcial:
({type λ[x]=Tuple2[Int,x]})#λ
¿Para qué sirven las proyecciones de tipos en Scala? ¿Por qué el sistema de tipos de Scala es compatible con las proyecciones de tipos y los tipos dependientes de la ruta? ¿Cuál fue la razón detrás de esta decisión de diseño?
No es una respuesta completa, pero aquí hay algunos usos para las proyecciones de tipo que he encontrado:
Tipo de metaprogramación a nivel . Para ver ejemplos, vea la serie de Michid (partes I , II , III ), la implementación de HList de Jesper y la serie en Apocalisp .
Una solución para habilitar la inferencia de tipos (para ejemplos, aquí hay algunas preguntas de SO 1 , 2 , 3 ).
Una forma de agrupar un montón de tipos en un solo parámetro de tipo. Por ejemplo, en una biblioteca matricial que estoy desarrollando, defino el
trait Scalar { type A; type B; type C; ... }
trait Scalar { type A; type B; type C; ... }
trait Scalar { type A; type B; type C; ... }
y luego páselo como un único parámetro a mi rasgo de matriz,trait Matrix[S <: Scalar] ...
Los tipos individuales pueden denominarseS#A
,S#B
, y así sucesivamente. Entre dos matrices de tipoMatrix[S]
, para la mismaS
, estos tipos serán compatibles (a diferencia de lo que sería el caso con los tipos dependientes de la ruta).