Skip to content

Commit

Permalink
Merge pull request #1254 from geny200/feature/fire-transformers
Browse files Browse the repository at this point in the history
Add transformers support for `Fire` and `Race`
  • Loading branch information
dos65 authored Apr 25, 2024
2 parents c201485 + 6a14e20 commit 3d04c72
Show file tree
Hide file tree
Showing 10 changed files with 314 additions and 35 deletions.
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
2 changes: 1 addition & 1 deletion modules/core/ce3/src/test/scala/tofu/IOSummonChecks.scala
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

0 comments on commit 3d04c72

Please sign in to comment.