如何为scala中的高级类型执行T[Any]的等价物



context:这是使用scala-3

final case class TableSchema[T[_[_]] <: Table]( /* ... */ )
// None of these work...
final case class Schema(tableSchemas: List[TableSchema[_ <: Table]])
final case class Schema(tableSchemas: List[[t[_[_]] <: Table] => TableSchema[t]])
final case class Schema(tableSchemas: List[[t[_[_]] <: Table] =>> TableSchema[t]])
final case class Schema(tableSchemas: List[TableSchema[_[_[_]] <: Table]]) // isnt even valid syntax?

我想,正确的是

final case class Schema(tableSchemas: List[TableSchema[_ <: ([_[_]] =>> Table)]])

或不带额外支架

final case class Schema(tableSchemas: List[TableSchema[_ <: [_[_]] =>> Table]])

即存在类型TableSchema[_]的未知参数_是常量类型Table的子类型。

来自 Lambda 类型的引述 - 更多详细信息/与参数化类型定义的关系:

参数化抽象类型

type T[X] >: L <: U

被视为非参数化抽象类型的简写 键入 lambda 作为边界。

type T >: ([X] =>> L) <: ([X] =>> U)

在 Scala 3.1.3 中测试。

相关内容

最新更新