diff options
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/main/scala/com/codiff/fairstream/Fair.scala | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/core/src/main/scala/com/codiff/fairstream/Fair.scala b/core/src/main/scala/com/codiff/fairstream/Fair.scala index 72a9ebe..a665c72 100644 --- a/core/src/main/scala/com/codiff/fairstream/Fair.scala +++ b/core/src/main/scala/com/codiff/fairstream/Fair.scala @@ -1,6 +1,6 @@ package com.codiff.fairstream -import cats.{Alternative, Monad, StackSafeMonad} +import cats.{Alternative, Monad} sealed trait Fair[+A] @@ -68,9 +68,8 @@ object Fair { } } - implicit val fairMonad - : Monad[Fair] with Alternative[Fair] with StackSafeMonad[Fair] = - new Monad[Fair] with Alternative[Fair] with StackSafeMonad[Fair] { + implicit val fairMonad: Monad[Fair] with Alternative[Fair] = + new Monad[Fair] with Alternative[Fair] { def empty[A]: Fair[A] = Fair.empty def pure[A](a: A): Fair[A] = Fair.unit(a) @@ -84,6 +83,12 @@ object Fair { Incomplete(flatMap(i.step)(f)) } + def tailRecM[A, B](a: A)(f: A => Fair[Either[A, B]]): Fair[B] = + flatMap(f(a)) { + case Right(b) => pure(b) + case Left(nextA) => Incomplete(tailRecM(nextA)(f)) + } + def combineK[A](x: Fair[A], y: Fair[A]): Fair[A] = mplus(x, y) } |
