加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Semigroup和SemigroupK之间的差异

发布时间:2020-12-16 18:29:02 所属栏目:安全 来源:网络整理
导读:在猫中有2个半群类型类:Semigroup和SemigroupK,后者用于类型构造函数. 我没有看到后者优于前者的优势.如果我查看列表实例,他们提供Monoid(虽然有MonoidK),而NonEmptyList提供SemigroupK.请注意,NonEmptyList还通过以下方法提供半群: implicit def catsData
在猫中有2个半群类型类:Semigroup和SemigroupK,后者用于类型构造函数.
我没有看到后者优于前者的优势.如果我查看列表实例,他们提供Monoid(虽然有MonoidK),而NonEmptyList提供SemigroupK.请注意,NonEmptyList还通过以下方法提供半群:

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

为什么会出现差异?

然后似乎大多数半群操作只能在Semigroup而不是SemigroupK上使用(Reducible中有reduceK,但这是我看到的唯一一个,并且它代表减少哪个适用于Semigroup).

那么,给定一个类型T [_],你可以通过同时为一些A设置SemigroupK [T]和半群[T [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,A]]

这不是很有用!从搜索开始,我看不到为SemigroupK实现的任何其他东西,并且无法使用Semigroup完成,但我可能错过了一些东西.

但是SemigroupK的主要观点是,一旦你拥有它,你也可以自动获得半群,就像NonEmptyList一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读