繁体   English   中英

Semigroup和SemigroupK之间的区别

[英]Difference between Semigroup and SemigroupK

在猫中,有2个半群类型类: SemigroupSemigroupK ,后者可用于类型构造函数。 我看不到后者相对于前者的优势。 如果我看名单情况下,它们都提供Monoid (虽然有MonoidK ),而NonEmptyList是提供SemigroupK 请注意, NonEmptyList还通过以下方法提供了一个Semigroup

implicit def catsDataSemigroupForNonEmptyList[A]: Semigroup[NonEmptyList[A]] =
  SemigroupK[NonEmptyList].algebra[A]

为什么会有差异?

然后,它似乎大多数半群操作只可用Semigroup ,而不是SemigroupK (有reduceKReducible ,但是这是唯一一个我看见了,它代表们reduce其作品上Semigroup )。

因此,给定类型T[_]Semigroup[T[A]] for some A同时拥有SemigroupK[T] Semigroup[T[A]] for some A您会得到什么?

编辑

现在存在删除MonoidK和SemigroupK的问题: https : //github.com/typelevel/cats/issues/1932

有一两件事你可以做SemigroupK你不能做Semigroup的组成情况为Nested

implicit def catsDataSemigroupKForNested[F[_]: SemigroupK, G[_]]: SemigroupK[Nested[F, G, ?]]

如果您尝试为Semigroup编写等效项,我认为您将获得的最接近的结果是

implicit def catsDataSemigroupForNested[F[_], G[_], A](implicit sg: Semigroup[F[G[A]]]): Semigroup[F[G[A]]] // or Semigroup[Nested[F, G, A]]

这不是很有用! 通过搜索,我看不到为SemigroupK实现的其他任何内容, 也无法使用Semigroup完成,但是我可能错过了一些东西。

但主要的一点SemigroupK是,一旦你拥有它,你可以自动获得一个Semigroup太,酷似NonEmptyList一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM