1. 基本类型
java: class List<T>{}
scala: class List[T] // 中括号内为类型参数,中括号前为类型构造器
2. 高阶类型
java: class List2<C<T>>{} // 不支持
scala: class List2[C[T]] 或 class List2[C[_]] // 类型参数C[T]和C[_],也是一个类型构造器
3. 对类型归纳
特定类型(proper type):例如Int、String、List[Int]、List2[List]等类型
泛型类型:用于构造特定类型(proper type)的类型,例如List[T]是一阶类型、List2[C[T]]是高阶类型
4. kind:类别——对类型的抽象
4.1 具体数值的类型Values
1,2,3可以抽象为Int类型
hello、world可以抽象为String类型
这里的Int、String类型都是对具体数值(Values)的抽象
4.2 数据类型的抽象类型types
type是对Int和String的抽象
4.3 类型的抽象类型kind
kind是对多种type的抽象
4.4 例子
- 所有的proper type被抽象为同一种kind,用*表示
- 一阶类型的抽象,比如Set[T],List[T]
Set和List都是通过传递一个特定类型(proper type)然后构造出一个特定类型(proper type),用kind表示为: * -> *
Pair通过传递两个特定类型(proper type)然后构造出一个特定类型(proper type),用kind表示为: (,) -> *
- 高阶类型的抽象:类型参数也是泛型类型的类型,称之为高阶higher kind,比如List2
List2通过传递一个泛型类型(类型构造器),然后构造出一个特定类型,用kind表示为:(* -> *) -> * // 注意与pair的区别
- 总结: