加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:05:38 所属栏目:安全 来源:网络整理
导读:有人可以解释嵌套在泛型中的结构类型的奇怪结构: implicit def Function1Functor[R]: Functor[({type λ[α]=(R) = α})#λ] = new Functor[({type λ[α]=(R) = α})#λ] .... 此示例来自Scalaz库:Functor.scala 为什么需要这种结构呢?写起来并不简单:
有人可以解释嵌套在泛型中的结构类型的奇怪结构:

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.这是一种语法技巧,允许类型别名内联创建并通过投影引用,因此整个表达式可用于需要类型的地方.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读