Bosatsu/Eval

source code: - test_workspace/Bosatsu/Eval.bosatsu

public dependencies: Bosatsu/Lazy

Index

Types

Eval[a]

type Eval[a: +*]

Values

always

this calls the thunk every time it is needed

references: Eval, Unit

def always[a](fn: () -> a) -> Eval[a]

defer

references: Eval, Unit

def defer[a](fn: () -> Eval[a]) -> Eval[a]

done

references: Eval

def done[a](a: a) -> Eval[a]

eval

Previous fuel-based implementation kept for reference: def eval_loop[a](budget: Int, arg: Loop[a]) -> Option[a]: recur (budget, arg): case _ if cmp_Int(budget, 0) matches LT | EQ: None case (_, RunEval(Pure(a), stack)): eval_loop(budget.sub(1), RunStack(eval_Leaf(a), stack)) case (_, RunEval(FlatMap(prev, fn), stack)): eval_loop(budget.sub(1), RunEval(prev, More(fn, stack))) case (_, RunStack(a, More(first, rest))): eval_loop(budget.sub(1), RunEval(first(a), rest))

references: Eval

def eval[a](e: Eval[a]) -> a

false_Eval

references: Bool, Eval

false_Eval: Eval[Bool]

flat_map

references: Eval

def flat_map[a, b](e: Eval[a], fn: a -> Eval[b]) -> Eval[b]

from_Lazy

this lifts a Lazy into an Eval

references: Bosatsu/Lazy::Lazy, Eval

def from_Lazy[a](lzy: Bosatsu/Lazy::Lazy[a]) -> Eval[a]

lazy_Eval

this makes an Eval that evaluates the thunk one time

references: Eval, Unit

def lazy_Eval[a](fn: () -> a) -> Eval[a]

map

references: Eval

def map[a, b](e: Eval[a], fn: a -> b) -> Eval[b]

one_Eval

references: Eval, Int

one_Eval: Eval[Int]

true_Eval

references: Bool, Eval

true_Eval: Eval[Bool]

unit_Eval

references: Eval, Unit

unit_Eval: Eval[()]

zero_Eval

references: Eval, Int

zero_Eval: Eval[Int]