Skip to content

Commit 15a9806

Browse files
committed
Added flatMapN
1 parent 7f2611c commit 15a9806

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

project/Boilerplate.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,12 @@ object Boilerplate {
522522
else
523523
s"def traverseN[G[_]: Applicative, Z](f: (${`A..N`}) => G[Z])(implicit traverse: Traverse[F], semigroupal: Semigroupal[F]): G[F[Z]] = Semigroupal.traverse$arity($tupleArgs)(f)"
524524

525+
val flatMap =
526+
if (arity == 1)
527+
s"def flatMap[Z](f: (${`A..N`}) => F[Z])(implicit flatMap: FlatMap[F]): F[Z] = flatMap.flatMap($tupleArgs)(f)"
528+
else
529+
s"def flatMapN[Z](f: (${`A..N`}) => F[Z])(implicit flatMap: FlatMap[F], semigroupal: Semigroupal[F]): F[Z] = flatMap.flatten(Semigroupal.map$arity($tupleArgs)(f))"
530+
525531
block"""
526532
|package cats
527533
|package syntax
@@ -534,6 +540,7 @@ object Boilerplate {
534540
- $map
535541
- $contramap
536542
- $imap
543+
- $flatMap
537544
- $tupled
538545
- $traverse
539546
- def apWith[Z](f: F[(${`A..N`}) => Z])(implicit apply: Apply[F]): F[Z] = apply.ap$n(f)($tupleArgs)

tests/src/test/scala/cats/tests/SyntaxSuite.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,14 @@ object SyntaxSuite {
372372
val fa = a.pure[F]
373373
}
374374

375-
def testFlatMap[F[_]: FlatMap, A, B, C, D]: Unit = {
375+
def testFlatMap[F[_]: FlatMap, A, B, C, D, Z]: Unit = {
376376
val a = mock[A]
377377
val returnValue = mock[F[Either[A, B]]]
378378
val done = a.tailRecM[F, B](a => returnValue)
379+
val tfabc = mock[(F[A], F[B], F[C])]
380+
val ff = mock[(A, B, C) => F[Z]]
381+
382+
tfabc.flatMapN(ff)
379383

380384
val x = mock[Function[A, F[B]]]
381385
val y = mock[Function[B, F[C]]]

0 commit comments

Comments
 (0)