【发布时间】:2018-02-14 18:47:36
【问题描述】:
在猫中有 2 个半群类型类:Semigroup 和 SemigroupK,后者用于类型构造函数。
我看不到后者比前者的优势。如果我查看他们提供Monoid 的列表实例(尽管有MonoidK),而NonEmptyList 提供SemigroupK。请注意,NonEmptyList 还通过以下方法提供Semigroup:
implicit def catsDataSemigroupForNonEmptyList[A]: Semigroup[NonEmptyList[A]] =
SemigroupK[NonEmptyList].algebra[A]
为什么会出现差异?
然后似乎大多数半群操作仅在 Semigroup 上可用,而不是在 SemigroupK 上(Reducible 中有 reduceK,但这是我看到的唯一一个,它委托给 reduce,它适用于 @ 987654339@)。
那么,给定一个 T[_] 类型,如果同时拥有 SemigroupK[T] 和 Semigroup[T[A]] for some A,你会得到什么?
编辑
现在有一个移除 MonoidK 和 SemigroupK 的问题:https://github.com/typelevel/cats/issues/1932
【问题讨论】:
-
据我所知,猫在
0.8中为List和NonEmptyList提供了一个SemigroupK。如果您看一下catsStdInstancesForList,其中的MonadCombine扩展了SemigroupK。 -
@jilen 我读了这篇文章,但它并没有真正回答我的问题
-
@DenisRosca 我在 cat 0.7.2 上看到了这一点,所以它可能是在以后的版本中添加的,这仍然让我想知道你通过这两个类型类获得了什么?
-
供将来参考:
Semigroup和SemigroupK的 Cats 文档。
标签: scala scala-cats