Псевдоним проекции типа не работает с границами типа - PullRequest
2 голосов
/ 09 июля 2019

Мне нужен псевдоним проекции типа, использующий границы типов и типы с более высоким родом, но он неожиданно завершается с ошибкой.Пробовал в 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 Ответ

3 голосов
/ 09 июля 2019

Если вы замените 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...