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