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一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |