在猫有2个半群类型的类:Semigroup并SemigroupK与类型构造后者的工作.我没有看到后者优于前者的优势.如果我查看他们提供的列表实例Monoid(虽然有一个MonoidK),而是NonEmptyList提供一个SemigroupK.注意,NonEmptyList还提供了一个Semigroupvia以下方法:
implicit def catsDataSemigroupForNonEmptyList[A]: Semigroup[NonEmptyList[A]] =
SemigroupK[NonEmptyList].algebra[A]
Run Code Online (Sandbox Code Playgroud)
为什么会出现差异?
然后似乎大多数半群操作只能在Semigroup和不可用SemigroupK(有reduceK,Reducible但这是我看到的唯一一个,并且它代表reduce哪个工作Semigroup).
那么,给定一种类型T[_],你会因为同时拥有a SemigroupK[T] 和 a 而获得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, ?]]
Run Code Online (Sandbox Code Playgroud)
如果你尝试写一个等价的Semigroup,我认为你会得到的最接近的是
implicit def catsDataSemigroupForNested[F[_], G[_], A](implicit sg: Semigroup[F[G[A]]]): Semigroup[F[G[A]]] // or Semigroup[Nested[F, G, A]]
Run Code Online (Sandbox Code Playgroud)
这不是很有用!从搜索中,我看不到任何其他已实现SemigroupK且无法使用 完成的内容Semigroup,但我可能错过了一些东西。
但要点SemigroupK是,一旦你拥有了它,你就可以自动获得一个Semigroup太,就像一样NonEmptyList。
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |