From 011b2d67bac21cd625a82abdad5cecaf0d11bd52 Mon Sep 17 00:00:00 2001 From: Amir Saeid Date: Sat, 14 Feb 2026 18:10:39 +0000 Subject: Remove StackSafeMonad claim --- core/src/main/scala/com/codiff/fairstream/Fair.scala | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'core') 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) } -- cgit v1.2.3