5

cat には 2 つのセミグループ型クラスがありますSemigroupSemigroupK後者は型コンストラクターで動作します。前者に対する後者の利点がわかりません。彼らが提供しているリストインスタンスを見るとMonoid( はありますがMonoidK)、NonEmptyList提供しているのはSemigroupK. 次のメソッド経由NonEmptyListでも提供していることに注意してください。Semigroup

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

なぜ不一致なのですか?

次に、ほとんどのセミグループ操作は on でのみ利用可能であり、利用できSemigroupないようですSemigroupK(ありますが、私が見たのreduceKはそれだけであり、これは onReducibleに委任されます)。reduceSemigroup

では、 type が与えられた場合、 aa のT[_]両方を持つことで何が得られるでしょうか?SemigroupK[T] Semigroup[T[A]] for some A

編集

MonoidK と SemigroupK を削除する問題が発生しました: https://github.com/typelevel/cats/issues/1932

4

1 に答える 1

0

SemigroupKできることでできないことの 1 つ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何かを見落としている可能性があります。

しかし、重要な点は、それを取得すると、まったく同じように自動的に too をSemigroupK取得できるということです。SemigroupNonEmptyList

于 2016-11-07T18:35:57.123 に答える