Search code examples
lazy-evaluationscaladocthunk

Does scala has a class for lazy thunks that are evaluated once or never?


Something as simple

class Thunk[+A](body: => A) {
  lazy val result: A = body;
}

Is it defined somewhere?

Or perhaps a slightly more sohpisticated

class Thunk[+A](body: => A) {
  private[this] var evaluatedInternal = false;

  lazy val result: A = {
    evaluatedInternal = true;
    body;
  }

  def evaluated: Boolean = evaluatedInternal;
}

Solution

  • There are classes Name and Need in Scala that provide just that functionality. See also Scalaz Issue #427.