我正在学习Cats库,发现*
是通用类型,如下所示:
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)。我很高兴您的解释。
答案 0 :(得分:1)
您正在查看的cats代码是master分支,用于Dotty(Scala 3)。 *
是3.0中的类型参数占位符:
https://dotty.epfl.ch/docs/reference/changed-features/wildcards.html
请注意,它已在3.2中被弃用,在3.3中已被_
取代。
编辑
它还用于实物投影仪插件