类型投影别名因类型限制而失败

时间:2019-07-09 10:13:59

标签: scala types

我想要一个使用类型界限和类型更高的类型的类型投影别名,但是它意外失败。在Scala 2.12.8和2.13.0中尝试过

以下作品:

object Testing {

  trait One[A] {
    trait Two[B <: A]
  }

  type Test = One[Int]#Two[Int]
}

,以下失败:

object Testing {

  trait One[A] {
    type Two[B <: A] = Altogether[A, B]
  }

  trait Altogether[A, B <: A]

  type Test = One[Int]#Two[Int]
}

有错误

type arguments [Int] do not conform to type Two's type parameter bounds [B <: A]

我希望第二个示例也可以编译。

以下作品:

type Test = Altogether[Int, Int]

有人可以提出替代方案吗?

1 个答案:

答案 0 :(得分:3)

如果将trait替换为type,它将按预期工作:

type One[A] = {
    type Two[B <: A] = Altogether[A, B]
}

trait Altogether[A, B <: A]

type Test = One[Int]#Two[Int]

经过Scala 2.13的测试。