FlatMap

cats.Eval$.FlatMap
sealed abstract class FlatMap[A] extends Eval[A]

FlatMap is a type of Eval[A] that is used to chain computations involving .map and .flatMap. Along with Eval#flatMap it implements the trampoline that guarantees stack-safety.

Users should not instantiate FlatMap instances themselves. Instead, they will be automatically created when needed.

Unlike a traditional trampoline, the internal workings of the trampoline are not exposed. This allows a slightly more efficient implementation of the .value method.

Attributes

Source
Eval.scala
Graph
Supertypes
class Eval[A]
trait Serializable
class Object
trait Matchable
class Any
Self type
FlatMap[A]

Members list

Type members

Types

type Start

Attributes

Source
Eval.scala

Value members

Concrete methods

def memoize: Eval[A]

Ensure that the result of the computation (if any) will be memoized.

Ensure that the result of the computation (if any) will be memoized.

Practically, this means that when called on an Always[A] a Later[A] with an equivalent computation will be returned.

Attributes

Source
Eval.scala
def value: A

Evaluate the computation and return an A value.

Evaluate the computation and return an A value.

For lazy instances (Later, Always), any necessary computation will be performed at this point. For eager instances (Now), a value will be immediately returned.

Attributes

Source
Eval.scala

Inherited methods

def flatMap[B](f: A => Eval[B]): Eval[B]

Lazily perform a computation based on an Eval[A], using the function f to produce an Eval[B] given an A.

Lazily perform a computation based on an Eval[A], using the function f to produce an Eval[B] given an A.

This call is stack-safe -- many .flatMap calls may be chained without consumed additional stack during evaluation. It is also written to avoid left-association problems, so that repeated calls to .flatMap will be efficiently applied.

Computation performed in f is always lazy, even when called on an eager (Now) instance.

Attributes

Inherited from:
Eval
Source
Eval.scala
def map[B](f: A => B): Eval[B]

Transform an Eval[A] into an Eval[B] given the transformation function f.

Transform an Eval[A] into an Eval[B] given the transformation function f.

This call is stack-safe -- many .map calls may be chained without consumed additional stack during evaluation.

Computation performed in f is always lazy, even when called on an eager (Now) instance.

Attributes

Inherited from:
Eval
Source
Eval.scala

Abstract fields

val run: Start => Eval[A]

Attributes

Source
Eval.scala
val start: () => Eval[Start]

Attributes

Source
Eval.scala