首页 > 解决方案 > 在 Scala 中是否有类型变量 'm forSome { type m[O] <: UpperBound[O] }` 的简写?

问题描述

问题:

trait UpperBound[O]
trait High[F[O] <: UpperBound[O]]

def canEqual(that :Any) = that.isInstanceOf[High[_]]

def high(h :High[_]) = ???

不编译,因为 scalac 看到的是_类型而不是它期望的类型构造函数。如何解决它,理想情况下不写小说?

原始问题(在编辑回复 Dmytro 的回答之前)有:

def canEqual(that :Any) = that.isInstanceOf[High[m forSome { type m[O] <: UpperBound[O] }]]

def high(h :High[m forSome { type m[O] <: UpperBound[O] }] = ???

通过使用一些通配符表达式来编写上述两种方法是否有更短的方法?简单地使用_inHigh的类型参数位置不起作用,因为类型不匹配,_[_]甚至不是有效的类型表达式。

标签: scalatypesexistential-typehigher-kinded-types

解决方案



推荐阅读