我在学习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被建议)。我将非常高兴得到你的解释。
你正在看的猫的代码是主分支,是为Dotty(Scala 3)编写的。*
是3.0中的一个类型参数占位符。
https:/dotty.epfl.chdocsreferencechanged-featureswildcards.html。
需要注意的是,它在3.2中已经被废弃,在3.3中被删除,取而代之的是 _
.
编辑
它也被用在实物投影仪插件中