Semigroup
在猫中有 2 个半群类型类:SemigroupK
后者用于类型构造函数。我看不到后者比前者的优势。如果我查看他们提供的列表实例Monoid
(尽管有 a MonoidK
),而NonEmptyList
提供的是SemigroupK
. 请注意,NonEmptyList
它还Semigroup
通过以下方法提供:
implicit def catsDataSemigroupForNonEmptyList[A]: Semigroup[NonEmptyList[A]] =
SemigroupK[NonEmptyList].algebra[A]
为什么会出现差异?
然后似乎大多数半组操作仅在而不Semigroup
可用SemigroupK
(有但这是我看到的唯一一个,它委托给哪个工作 on )。reduceK
Reducible
reduce
Semigroup
那么,给定一个 type T[_]
,同时拥有 aSemigroupK[T]
和a会得到Semigroup[T[A]] for some A
什么?
编辑
现在有一个删除 MonoidK 和 SemigroupK 的问题:https ://github.com/typelevel/cats/issues/1932