Skip to content

Commit

Permalink
backported #3124 Add SemigroupK sum
Browse files Browse the repository at this point in the history
  • Loading branch information
gagandeepkalra authored and travisbrown committed Feb 19, 2020
1 parent bf5f51f commit 29efba5
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
5 changes: 4 additions & 1 deletion core/src/main/scala/cats/syntax/all.scala
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,7 @@ trait AllSyntaxBinCompat5 extends ParallelBitraverseSyntax

trait AllSyntaxBinCompat6 extends ParallelUnorderedTraverseSyntax

trait AllSyntaxBinCompat7 extends FunctorSyntaxBinCompat0 with BiFoldableSyntaxBinCompat0
trait AllSyntaxBinCompat7
extends FunctorSyntaxBinCompat0
with BiFoldableSyntaxBinCompat0
with SemigroupKSyntaxBinCompat0
2 changes: 1 addition & 1 deletion core/src/main/scala/cats/syntax/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ package object syntax {
object representable extends RepresentableSyntax
object semigroup extends SemigroupSyntax
object semigroupal extends SemigroupalSyntax
object semigroupk extends SemigroupKSyntax
object semigroupk extends SemigroupKSyntax with SemigroupKSyntaxBinCompat0
object show extends ShowSyntax
object strong extends StrongSyntax
object try_ extends TrySyntax
Expand Down
24 changes: 24 additions & 0 deletions core/src/main/scala/cats/syntax/semigroupk.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,27 @@ package cats
package syntax

trait SemigroupKSyntax extends SemigroupK.ToSemigroupKOps

private[syntax] trait SemigroupKSyntaxBinCompat0 {
implicit final def catsSyntaxSemigroupKBinCompat0[F[_]](fa: SemigroupK[F]): SemigroupKOps[F] =
new SemigroupKOps(fa)
}

final private[syntax] class SemigroupKOps[F[_]](val S: SemigroupK[F]) extends AnyVal {

/**
* Combines `F[A]` and `F[B]` into a `F[Either[A,B]]]`.
*
* Example:
* {{{
* scala> import cats.SemigroupK
* scala> import cats.syntax.semigroupk._
* scala> import cats.data.NonEmptyList
* scala> SemigroupK[NonEmptyList].sum(NonEmptyList.one("abc"), NonEmptyList.one(2))
* res0: NonEmptyList[Either[String,Int]] = NonEmptyList(Left(abc), Right(2))
* }}}
*/
def sum[A, B](fa: F[A], fb: F[B])(implicit F: Functor[F]): F[Either[A, B]] =
S.combineK(F.map(fa)(Left(_)), F.map(fb)(Right(_)))

}

0 comments on commit 29efba5

Please sign in to comment.