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.
Builds a Coeval
out of a cats.Eval
value.
Builds a Coeval
out of a Scala Try
value.
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(e)) { (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(e), 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(e), 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(e), 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(e), 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.