Я изучал библиотеку 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). Буду очень рад вашим объяснениям.