работать с имплицитами очень некрасиво, потому что это должно быть естественно описано как конструктор типов, и только методы могут иметь импликации, а не конструкторы типов. Так что я хотел бы переключиться обратно на уровень типа от последствий это на самом деле возможно
ите за неописательное название. Вычисления на уровне типов - не слишком распространенная тема в Интернете, чтобы установить точные термины.
Я пытался использовать вычисления уровня типа и внезапно получал ложные ошибки время от времени. Я просто не мог понять, почему так мало различий. Мне удалось подделать еще один краткий пример:
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]
^
НоEX
а такжеDX
имел одинаковые границы параметров типа. Почему это правильно в одном случае и неправильно в другом?