gpt4 book ai didi

scala - Semigroup和SemigroupK之间的区别

转载 作者:行者123 更新时间:2023-12-03 17:39:10 24 4
gpt4 key购买 nike

在猫中有 2 个半群类型类:SemigroupSemigroupK后者处理类型构造函数。
我看不到后者比前者的优势。如果我查看他们提供的列表实例 Monoid (虽然有 MonoidK ),而 NonEmptyList正在提供 SemigroupK .请注意 NonEmptyList还提供Semigroup通过以下方法:

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

为什么会出现差异?

然后似乎大多数半群操作仅在 Semigroup 上可用。而不是 SemigroupK ( reduceK 中有 Reducible,但这是我看到的唯一一个,它委托(delegate)给 reduce,它在 Semigroup 上工作)。

所以,给定一个类型 T[_] ,如果同时拥有 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做。

关于scala - Semigroup和SemigroupK之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40462286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com