Что означает `*` в универсальном типе?

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

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]поэтому нет необходимости указывать универсальный тип. Или это могло бытьAnyтипа (например, предлагается Inteliij). Буду очень рад вашим объяснениям.

1 ответ

Решение

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

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

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


РЕДАКТИРОВАТЬ

Он также используется в качестве плагина для проектора.

Другие вопросы по тегам