簡體   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