【发布时间】:2015-11-03 10:19:29
【问题描述】:
查看无形库的来源,我注意到不同的高级类型成员声明,想知道它在使用上是否有一些具体的区别。例如通用特征here:
trait Generic1[F[_], FR[_[_]]] {
type R[t]
// ...
}
trait IsHCons1[L[_], FH[_[_]], FT[_[_]]] {
type H[_]
// ...
}
使用类型构造函数的通用语法声明一个类型成员(即H[_])并且Generic1 trait 具有R[t]。虽然辅助类型别名以类似的方式定义:
object Generic1 {
type Aux[F[_], FR[_[_]], R0[_]] = Generic1[F, FR] { type R[t] = R0[t] }
// ...
}
object IsHCons1 {
type Aux[L[_], FH[_[_]], FT[_[_]], H0[_], T0[_] <: HList] = IsHCons1[L, FH, FT] { type H[t] = H0[t] ; type T[t] = T0[t] }
// ...
}
所以我想知道R[t]和H[_]有什么区别吗?
【问题讨论】:
标签: scala syntax types shapeless higher-kinded-types