From 1c335d4e6622683fbc6a67fcd4175cab5303ce8f Mon Sep 17 00:00:00 2001 From: "ta.tanaka" Date: Thu, 25 Jul 2019 16:22:24 +0900 Subject: [PATCH] Add bifold to Bifoldable close #2947. --- core/src/main/scala/cats/Bifoldable.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/main/scala/cats/Bifoldable.scala b/core/src/main/scala/cats/Bifoldable.scala index ae49e72d32..db2cb313f2 100644 --- a/core/src/main/scala/cats/Bifoldable.scala +++ b/core/src/main/scala/cats/Bifoldable.scala @@ -1,6 +1,7 @@ package cats import simulacrum.typeclass +import cats.instances.tuple.catsKernelStdMonoidForTuple2 /** * A type class abstracting over types that give rise to two independent [[cats.Foldable]]s. @@ -20,6 +21,9 @@ import simulacrum.typeclass (c: C, b: B) => C.combine(c, g(b)) ) + def bifold[A: Monoid, B: Monoid](fab: F[A, B]): (A, B) = + bifoldMap(fab)((_, Monoid[B].empty), (Monoid[A].empty, _)) + def compose[G[_, _]](implicit ev: Bifoldable[G]): Bifoldable[λ[(α, β) => F[G[α, β], G[α, β]]]] = new ComposedBifoldable[F, G] { val F = self