Что означает `*` в универсальном типе?
Я изучал библиотеку кошек и обнаружил *
как общий тип, например:
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 в пользу _
.
РЕДАКТИРОВАТЬ
Он также используется в качестве плагина для проектора.