了解类型投影

时间:2016-03-03 19:44:04

标签: scala kind-projector

取自non/kind-projector,区别在于:

// partially-applied type named "IntOrA"
type IntOrA[A] = Either[Int, A]

// type projection implementing the same type anonymously (without a name).
({type L[A] = Either[Int, A]})#L

他们是等同的吗?

1 个答案:

答案 0 :(得分:3)

它们几乎相同,正如评论中所述。

假设您有一个课程trait Super[F[_]] {},并且您希望在F[x] = Either[Int, x]的位置实施该课程 你可以写:

type IntOrA[A] = Either[Int, A]
class B extends Super[IntOrA] {}

但如果你想要一个班轮,你可以写:

class B extends Super[({type L[A] = Either[Int, A]})#L] {}

或者使用善良的投影仪,您可以像:

class B extends Super[λ(A => Either[Int, A])] {}

甚至:

class B extends Super[Either[Int, ?]] {}

没有其他区别,只能使它成为一行,并且这种类型是匿名的。