Для чего нужны типы прогнозов в Scala? Почему система типа Scala поддерживает как проекции типов, так и типы, зависящие от типов? Каково было обоснование этого проектного решения?
Для чего нужны типы прогнозов?
Ответ 1
Не полный ответ, но вот некоторые виды использования для прогнозов типов, с которыми я столкнулся:
-
Метапрограммирование уровня уровня. Например, см. Серию Michid (части I, II, III), Jesper реализация HList и серию в Apocalisp.
-
Обходной путь для включения вывода типа (например, вот некоторые предыдущие SO-вопросы 1, 2, 3).
-
Способ объединения пучков типов в один тип. Например, в матричной библиотеке, которую я разрабатываю, я определяю
trait Scalar { type A; type B; type C; ... }
, а затем передаю ее как единственный параметр в свой матричный признак,trait Matrix[S <: Scalar] ...
. Отдельные типы могут называтьсяS#A
,S#B
и скоро. Между двумя матрицами типаMatrix[S]
, для тех жеS
, эти типы будут совместимы (в отличие от того, что было бы с типами, зависящими от пути).
Ответ 2
Для приложения с частичным типом можно использовать проекции одного типа:
({type λ[x]=Tuple2[Int,x]})#λ