如何在Scala中定义一个存在性更高的kinded类型
发布时间:2020-12-16 18:28:41 所属栏目:安全 来源:网络整理
导读:我试图定义一个在 Scala中接受存在性更高的kinded类型的类型. 不幸的是,Scalac不允许这样做. Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM,Java 1.8.0_45).Type in expressions to have them evaluated.Type :help for more informa
我试图定义一个在
Scala中接受存在性更高的kinded类型的类型.
不幸的是,Scalac不允许这样做. Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM,Java 1.8.0_45). Type in expressions to have them evaluated. Type :help for more information. scala> :paste // Entering paste mode (ctrl-D to finish) trait H[F[_,_]] trait T[A,B] val h:H[T] = null val e:H[F] forSome { type F[A,B] } = h // Exiting paste mode,now interpreting. <console>:13: error: type mismatch; found : H[T] required: H[_[A,B] <: Any] Note: T <: Any,but trait H is invariant in type F. You may wish to define F as +F instead. (SLS 4.5) val e:H[F] forSome { type F[A,B] } = h ^ 我怎么能解决它? 无论类型参数是什么,我如何定义匹配任何H的类型? 更新:我甚至试图让Scalac推断出存在主义类型,但仍然不幸运. Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM,B] val h:H[T] = null trait T2[A,B] val h2:H[T2] = null Seq(h,h2) // Exiting paste mode,now interpreting. <console>:17: error: type mismatch; found : H[T] required: H[_ >: T2 with T <: Object] Seq(h,h2) ^ <console>:17: error: type mismatch; found : H[T2] required: H[_ >: T2 with T <: Object] Seq(h,h2) ^ 解决方法
可能sschaef是对的,这是不可能的.我不知道以下内容是否对您有所帮助:
type F[A,B] = X[A,B] forSome { type X[A,B] } // alias trait H[F[_,B] val h: H[T] = null val e: H[F] = h.asInstanceOf[H[F]] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |