Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add transformers support for Fire and Race #1254

Merged
merged 1 commit into from
Apr 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions modules/core/ce2/src/test/scala/tofu/StartSuite.scala
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package tofu

import cats.effect.Concurrent
import cats.data.*
import cats.effect.{Concurrent, ContextShift, Fiber, IO}
import cats.{Applicative, Id}
import tofu.concurrent.{MakeAgent, MakeSerialAgent}
import tofu.syntax.monadic.*
import tofu.syntax.start.*

import scala.annotation.nowarn
import cats.effect.IO
import cats.effect.ContextShift
import tofu.concurrent.{MakeAgent, MakeSerialAgent}
import tofu.syntax.start._
import tofu.syntax.monadic._
import cats.effect.Fiber
import cats.Id

@nowarn("msg=parameter")
object StartSuite {
Expand All @@ -27,6 +25,22 @@ object StartSuite {
MakeSerialAgent[IO, IO]
}

def fireForDataF[F[_]: Applicative: Fire] = {
Fire[ReaderT[F, String, _]]
Fire[OptionT[F, _]]
Fire[EitherT[F, String, _]]
Fire[IorT[F, String, _]]
Fire[WriterT[F, String, _]]
}

def raceForDataF[F[_]: Applicative: Race] = {
Race[ReaderT[F, String, _]]
Race[OptionT[F, _]]
Race[EitherT[F, String, _]]
Race[IorT[F, String, _]]
Race[WriterT[F, String, _]]
}

def testStartSyntaxCheck[A, B, F[_]: Concurrent](fa: F[A], fb: F[B]): F[(A, B)] =
fa.racePair[F, B, Id, Fiber[F, _]](fb).flatMap {
case Left((a, eb)) => eb.join.tupleLeft(a)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package tofu

import cats.data.ReaderT
import cats.effect.{IO}
import cats.effect.IO

class IOSummonChecks {
implicitly[Fire[IO]]
Expand Down
29 changes: 22 additions & 7 deletions modules/core/ce3/src/test/scala/tofu/StartSuite.scala
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package tofu

import cats.effect.Concurrent
import cats.effect.IO
import tofu.syntax.start._
import tofu.syntax.monadic._
import cats.effect.kernel.Outcome
import cats.effect.kernel.MonadCancelThrow
import cats.Applicative
import cats.data.*
import cats.effect.{Concurrent, IO}
import cats.effect.kernel.{Fiber, MonadCancelThrow, Outcome}
import tofu.concurrent.{MakeAgent, MakeSerialAgent}
import cats.effect.kernel.Fiber
import tofu.syntax.monadic.*
import tofu.syntax.start.*

object StartSuite {
def summonInstancesForConcurrent[F[_]: Concurrent] = {
Expand All @@ -25,6 +24,22 @@ object StartSuite {
MakeSerialAgent[IO, IO]
}

def fireForDataF[F[_]: Applicative: Fire] = {
Fire[ReaderT[F, String, _]]
Fire[OptionT[F, _]]
Fire[EitherT[F, String, _]]
Fire[IorT[F, String, _]]
Fire[WriterT[F, String, _]]
}

def raceForDataF[F[_]: Applicative: Race] = {
Race[ReaderT[F, String, _]]
Race[OptionT[F, _]]
Race[EitherT[F, String, _]]
Race[IorT[F, String, _]]
Race[WriterT[F, String, _]]
}

private def withInterrupt[F[_], A](oa: Outcome[F, Throwable, A])(implicit F: MonadCancelThrow[F]): F[A] =
oa.embed(F.canceled *> F.raiseError(new InterruptedException))

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package tofu.internal.instances

import cats.MonadError
import tofu.Fibers
import tofu.compat.unused
import tofu.internal.carriers.{FibersCarrier2, FibersCarrier3}

private[tofu] trait FibersInstance extends FibersInstances0 {
final implicit def byCarrierCE3[F[_], E, Ex[_], Fib[_]](implicit
@unused FE: MonadError[F, E],
carrier: FibersCarrier3.Aux[F, E, Ex, Fib]
): Fibers[F, Ex, Fib] = carrier.content
}

private[tofu] trait FibersInstances0 {
final implicit def byCarrierCE2[F[_], Ex[_], Fib[_]](implicit
carrier: FibersCarrier2.Aux[F, Ex, Fib]
): Fibers[F, Ex, Fib] = carrier.content
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
package tofu.internal
package instances

import tofu.compat.unused

import cats.MonadError
import tofu.Fibers
import tofu.Fire
import tofu.compat.unused
import tofu.internal.carriers.{FibersCarrier2, FibersCarrier3}

private[tofu] trait FireInstance extends FireInstances0 {
final implicit def byCarrierCE3[F[_], E, Ex[_], Fib[_]](implicit
final implicit def byCarrierCE3[F[_], E](implicit
@unused FE: MonadError[F, E],
carrier: FibersCarrier3.Aux[F, E, Ex, Fib]
): Fibers[F, Ex, Fib] = carrier.content
carrier: FibersCarrier3[F, E]
): Fire[F] = carrier.content
}

private[tofu] trait FireInstances0 {
final implicit def byCarrierCE2[F[_], Ex[_], Fib[_]](implicit
carrier: FibersCarrier2.Aux[F, Ex, Fib]
): Fibers[F, Ex, Fib] = carrier.content
final implicit def byCarrierCE2[F[_]](implicit
carrier: FibersCarrier2[F]
): Fire[F] = carrier.content
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package tofu.internal.instances

import cats.MonadError
import tofu.Race
import tofu.compat.unused
import tofu.internal.carriers.{FibersCarrier2, FibersCarrier3}

private[tofu] trait RaceInstance extends RaceInstances0 {
final implicit def byCarrierCE3[F[_], E](implicit
@unused FE: MonadError[F, E],
carrier: FibersCarrier3[F, E]
): Race[F] = carrier.content
}

private[tofu] trait RaceInstances0 {
final implicit def byCarrierCE2[F[_]](implicit
carrier: FibersCarrier2[F]
): Race[F] = carrier.content
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package tofu.internal
package instances

import cats.MonadError
import tofu.Fibers
import tofu.internal.carriers.{FibersCarrier2, FibersCarrier3}

import scala.compiletime.summonFrom

private[tofu] trait FibersInstance:
inline given [F[_], E, Ex[_], Fib[_]](using inline m: MonadError[F, E]): Fibers[F, Ex, Fib] = summonFrom {
case carrier: FibersCarrier3.Aux[F, E, Ex, Fib] => carrier.content
case carrier: FibersCarrier2.Aux[F, Ex, Fib] => carrier.content
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package tofu.internal
package instances

import cats.MonadError
import tofu.Fibers
import tofu.Fire
import tofu.internal.carriers.{FibersCarrier2, FibersCarrier3}

import scala.compiletime.summonFrom

private[tofu] trait FireInstance:
inline given [F[_], E, Ex[_], Fib[_]](using inline m: MonadError[F, E]): Fibers[F, Ex, Fib] = summonFrom {
case carrier: FibersCarrier3.Aux[F, E, Ex, Fib] => carrier.content
case carrier: FibersCarrier2.Aux[F, Ex, Fib] => carrier.content
inline given [F[_], E](using inline m: MonadError[F, E]): Fire[F] = summonFrom {
case carrier: FibersCarrier3[F, E] => carrier.content
case carrier: FibersCarrier2[F] => carrier.content
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package tofu.internal
package instances

import cats.MonadError
import tofu.Race
import tofu.internal.carriers.{FibersCarrier2, FibersCarrier3}

import scala.compiletime.summonFrom

private[tofu] trait RaceInstance:
inline given [F[_], E](using inline m: MonadError[F, E]): Race[F] = summonFrom {
case carrier: FibersCarrier3[F, E] => carrier.content
case carrier: FibersCarrier2[F] => carrier.content
}
Loading
Loading