运维开发网

scala – 泛型中奇怪的嵌套结构类型

运维开发网 https://www.qedev.com 2020-07-30 16:17 出处:网络 作者:运维开发网整理
有人可以解释嵌套在泛型中的结构类型的奇怪结构: implicit def Function1Functor[R]: Functor[({type λ[α]=(R) => α})#λ] = new Functor[({type λ[α]=(R) => α})#λ] .... 此示例来自Scalaz库:Functor.scala 为什么需要这种结构呢?写起来并不简单: implicit def
有人可以解释嵌套在泛型中的结构类型的奇怪结构:

implicit def Function1Functor[R]: Functor[({type λ[α]=(R) => α})#λ] = 
  new Functor[({type λ[α]=(R) => α})#λ] ....

此示例来自Scalaz库:Functor.scala

为什么需要这种结构呢?写起来并不简单:

implicit def Function1Functor[R,A]: Functor[R =>A]

要么

implicit def Function1Functor[R,A]: Functor[Function1[R,A]]
Functor类型构造函数的签名显示它是使用另一个一元类型构造函数F进行参数化的:

trait Functor[F[_]] extends InvariantFunctor[F]

R =>都不是. A和Function1 [R,A]都是类型构造函数;他们没有参数.

但是在:

type λ[α] = (R) => α

λ是一个带有一个参数α的类型构造函数. (R已在此上下文中定义.)

语法({typeλ[α] =(R)=>α})#λ被称为类型lambda.这是一种语法技巧,允许类型别名内联创建并通过投影引用,因此整个表达式可用于需要类型的地方.

0

精彩评论

暂无评论...
验证码 换一张
取 消