Later

final class Later[A](f: () => A) extends Leaf[A]

Construct a lazy Eval[A] instance.

Construct a lazy Eval[A] instance.

This type should be used for most "lazy" values. In some sense it is equivalent to using a lazy val.

When caching is not required or desired (e.g. if the value produced may be large) prefer Always. When there is no computation necessary, prefer Now.

Once Later has been evaluated, the closure (and any values captured by the closure) will not be retained, and will be available for garbage collection.

Companion
object
class Leaf[A]
class Eval[A]
trait Serializable
class Object
trait Matchable
class Any

Value members

Concrete methods

def memoize: Eval[A]

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.

Inherited from
Eval
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.

Inherited from
Eval

Concrete fields

lazy val value: A