Constructs a lazy Coeval instance.
Constructs a lazy Coeval instance.
This type can be used for "lazy" values. In some sense it is equivalent to using a Function0 value.
The Eager type represents a strict, already evaluated result
of a Coeval that either resulted in success, wrapped in a
Now, or in an error, wrapped in an Error.
The Eager type represents a strict, already evaluated result
of a Coeval that either resulted in success, wrapped in a
Now, or in an error, wrapped in an Error.
It's the moral equivalent of scala.util.Try, except that
application of functions such as map and flatMap produces
Coeval references that are still lazily evaluated.
Constructs an eager Coeval instance for a result that represents an error.
Constructs an eager Coeval instance from a strict value that's already known.
Promotes a non-strict value to a Coeval.
Given an A type that has a cats.Monoid[A] implementation,
then this provides the evidence that Coeval[A] also has
a Monoid[Coeval[A]] implementation.
Given an A type that has a cats.Semigroup[A] implementation,
then this provides the evidence that Coeval[A] also has
a Semigroup[Coeval[A]] implementation.
Given an A type that has a cats.Semigroup[A] implementation,
then this provides the evidence that Coeval[A] also has
a Semigroup[Coeval[A]] implementation.
This has a lower-level priority than Coeval.catsMonoid in order to avoid conflicts.
Instance of Cats type classes for Coeval, implementing
cats.effect.Sync (which implies Applicative, Monad, MonadError)
and cats.CoflatMap.
Promote a non-strict value representing a Coeval
to a Coeval of the same type.
Alias for eval.
Promote a non-strict value to a Coeval, catching exceptions in the
process.
Promote a non-strict value to a Coeval, catching exceptions in the
process.
Note that since Coeval is not memoized, this will recompute the
value each time the Coeval is executed.
Promote a non-strict value to a Coeval that is memoized on the first
evaluation, the result being then available on subsequent evaluations.
Promote a non-strict value to a Coeval that is memoized on the first
evaluation, the result being then available on subsequent evaluations.
Guarantees thread-safe idempotency.
UNSAFE — this operation allocates a shared, mutable reference, which can break in certain cases referential transparency, even if this operation guarantees idempotency (i.e. referential transparency implies idempotency, but idempotency does not imply referential transparency).
The allocation of a mutable reference is known to be a side effect, thus breaking referential transparency, even if calling this method does not trigger the evaluation of side effects suspended by the source.
Use with care. Sometimes it's easier to just keep a shared, memoized reference to some connection, but keep in mind it might be better to pass such a reference around as a parameter.
Converts any value that has a CoevalLike instance into a Coeval.
Converts a Scala Either into a Coeval.
Converts a Scala Either into a Coeval.
is a function that knows how to convert into a Throwable
in order to throw that error in the MonadError context.
Converts a Scala Either into a Coeval.
Converts a cats.Eval into a Coeval.
Converts a cats.effect.SyncIO into a Coeval.
Converts a Scala Try into a Coeval.
Pairs 2 Coeval values, applying the given mapping function.
Pairs 2 Coeval values, applying the given mapping function.
Returns a new Coeval reference that completes with the result
of mapping that function to their successful results, or in
failure in case either of them fails.
val fa1 = Coeval(1) val fa2 = Coeval(2) // Yields Success(3) Coeval.map2(fa1, fa2) { (a, b) => a + b } // Yields Failure(e), because the second arg is a failure Coeval.map2(fa1, Coeval.raiseError[Int](new RuntimeException("boo"))) { (a, b) => a + b }
Pairs 3 Coeval values, applying the given mapping function.
Pairs 3 Coeval values, applying the given mapping function.
Returns a new Coeval reference that completes with the result
of mapping that function to their successful results, or in
failure in case either of them fails.
val fa1 = Coeval(1) val fa2 = Coeval(2) val fa3 = Coeval(3) // Yields Success(6) Coeval.map3(fa1, fa2, fa3) { (a, b, c) => a + b + c } // Yields Failure(e), because the second arg is a failure Coeval.map3(fa1, Coeval.raiseError[Int](new RuntimeException("boo")), fa3) { (a, b, c) => a + b + c }
Pairs 4 Coeval values, applying the given mapping function.
Pairs 4 Coeval values, applying the given mapping function.
Returns a new Coeval reference that completes with the result
of mapping that function to their successful results, or in
failure in case either of them fails.
val fa1 = Coeval(1) val fa2 = Coeval(2) val fa3 = Coeval(3) val fa4 = Coeval(4) // Yields Success(10) Coeval.map4(fa1, fa2, fa3, fa4) { (a, b, c, d) => a + b + c + d } // Yields Failure(e), because the second arg is a failure Coeval.map4(fa1, Coeval.raiseError[Int](new RuntimeException("boo")), fa3, fa4) { (a, b, c, d) => a + b + c + d }
Pairs 5 Coeval values, applying the given mapping function.
Pairs 5 Coeval values, applying the given mapping function.
Returns a new Coeval reference that completes with the result
of mapping that function to their successful results, or in
failure in case either of them fails.
val fa1 = Coeval(1) val fa2 = Coeval(2) val fa3 = Coeval(3) val fa4 = Coeval(4) val fa5 = Coeval(5) // Yields Success(15) Coeval.map5(fa1, fa2, fa3, fa4, fa5) { (a, b, c, d, e) => a + b + c + d + e } // Yields Failure(e), because the second arg is a failure Coeval.map5(fa1, Coeval.raiseError[Int](new RuntimeException("boo")), fa3, fa4, fa5) { (a, b, c, d, e) => a + b + c + d + e }
Pairs 6 Coeval values, applying the given mapping function.
Pairs 6 Coeval values, applying the given mapping function.
Returns a new Coeval reference that completes with the result
of mapping that function to their successful results, or in
failure in case either of them fails.
val fa1 = Coeval(1) val fa2 = Coeval(2) val fa3 = Coeval(3) val fa4 = Coeval(4) val fa5 = Coeval(5) val fa6 = Coeval(6) // Yields Success(21) Coeval.map6(fa1, fa2, fa3, fa4, fa5, fa6) { (a, b, c, d, e, f) => a + b + c + d + e + f } // Yields Failure(e), because the second arg is a failure Coeval.map6(fa1, Coeval.raiseError[Int](new RuntimeException("boo")), fa3, fa4, fa5, fa6) { (a, b, c, d, e, f) => a + b + c + d + e + f }
Returns a Coeval that on execution is always successful, emitting
the given strict value.
Lifts a value into the coeval context.
Lifts a value into the coeval context. Alias for now.
Returns a Coeval that on execution is always finishing in error
emitting the specified exception.
Transforms a TraversableOnce of coevals into a coeval producing
the same collection of gathered results.
Transforms a TraversableOnce of coevals into a coeval producing
the same collection of gathered results.
It's a simple version of traverse.
Alias for defer.
Keeps calling f until it returns a Right result.
Keeps calling f until it returns a Right result.
Based on Phil Freeman's Stack Safety for Free.
Transforms a TraversableOnce[A] into a coeval of the same collection
using the provided function A => Coeval[B].
Transforms a TraversableOnce[A] into a coeval of the same collection
using the provided function A => Coeval[B].
It's a generalized version of sequence.
A Coeval[Unit] provided for convenience.
Pairs two Coeval instances.
Pairs three Coeval instances.
Pairs four Coeval instances.
Pairs five Coeval instances.
Pairs six Coeval instances.
Zips together multiple Coeval instances.
Coeval builders.