[英]Difference between Semigroup and SemigroupK
在貓中,有2個半群類型類: Semigroup
和SemigroupK
,后者可用於類型構造函數。 我看不到后者相對於前者的優勢。 如果我看名單情況下,它們都提供Monoid
(雖然有MonoidK
),而NonEmptyList
是提供SemigroupK
。 請注意, NonEmptyList
還通過以下方法提供了一個Semigroup
:
implicit def catsDataSemigroupForNonEmptyList[A]: Semigroup[NonEmptyList[A]] =
SemigroupK[NonEmptyList].algebra[A]
為什么會有差異?
然后,它似乎大多數半群操作只可用Semigroup
,而不是SemigroupK
(有reduceK
在Reducible
,但是這是唯一一個我看見了,它代表們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.