cat には 2 つのセミグループ型クラスがありますSemigroup
。SemigroupK
後者は型コンストラクターで動作します。前者に対する後者の利点がわかりません。彼らが提供しているリストインスタンスを見るとMonoid
( はありますがMonoidK
)、NonEmptyList
提供しているのはSemigroupK
. 次のメソッド経由NonEmptyList
でも提供していることに注意してください。Semigroup
implicit def catsDataSemigroupForNonEmptyList[A]: Semigroup[NonEmptyList[A]] =
SemigroupK[NonEmptyList].algebra[A]
なぜ不一致なのですか?
次に、ほとんどのセミグループ操作は on でのみ利用可能であり、利用できSemigroup
ないようですSemigroupK
(ありますが、私が見たのreduceK
はそれだけであり、これは onReducible
に委任されます)。reduce
Semigroup
では、 type が与えられた場合、 aとa のT[_]
両方を持つことで何が得られるでしょうか?SemigroupK[T]
Semigroup[T[A]] for some A
編集
MonoidK と SemigroupK を削除する問題が発生しました: https://github.com/typelevel/cats/issues/1932