Что означает `*` в типе generi c? - PullRequest
0 голосов
/ 02 мая 2020

Я изучал библиотеку Cats и нашел * как обобщенный тип c, например:

implicit def catsDataSemigroupKForValidated[A](implicit A: Semigroup[A]): SemigroupK[Validated[A, *]] =
  new SemigroupK[Validated[A, *]] {
    def combineK[B](x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x match {
      case v @ Valid(_) => v
      case Invalid(ix) =>
        y match {
          case Invalid(iy)  => Invalid(A.combine(ix, iy))
          case v @ Valid(_) => v
        }
    }
  }

Я предполагаю, что используется *, потому что метод combineK вернуть Validated[A, B], поэтому нет необходимости указывать тип generi c. Или это может быть Any тип (как, например, предлагается Inteliij). Буду очень рад вашим объяснениям.

1 Ответ

2 голосов
/ 02 мая 2020

Код кошек, который вы смотрите, это главная ветвь, которая предназначена для Дотти (Scala 3). * является заполнителем параметра типа в 3.0:

https://dotty.epfl.ch/docs/reference/changed-features/wildcards.html

Обратите внимание, что он уже устарел в 3.2 и удален в 3.3 в пользу _ .

...