为什么某些类型的预测会被拒绝而不是略有不同?

时间:2017-08-19 04:41:01

标签: scala types type-level-computation

抱歉没有描述性标题。类型级计算在互联网上并不是太常见的主题,无法建立精确的术语。

我尝试使用类型级计算,并且每次都会突然出现虚假错误。我无法理解为什么这么小的差异很重要。我设法打造了另一个简洁的例子:

trait Sample {
  type X
  type DX[I <: X] <: Nothing
  type EX[I <: X] = Nothing
}
type Aux[I] = Sample {type X = I}

type U1 = Aux[Int]#DX[Int] // ok
type U2 = Aux[Int]#EX[Int] // fails

错误消息是:

error: type arguments [Int] do not conform to type EX's type parameter bounds [I <: Sample.this.X]
type U2 = Aux[Int]#EX[Int]
                   ^

但是EXDX具有相同的类型参数边界。为什么它在一个案例中是正确的而在另一个案例中是错的?

0 个答案:

没有答案