Bosatsu/Eval
source code: - test_workspace/Bosatsu/Eval.bosatsu
public dependencies: Bosatsu/Lazy
Index
- Types:
Eval - Values:
always,defer,done,eval,false_Eval,flat_map,from_Lazy,lazy_Eval,map,one_Eval,true_Eval,unit_Eval,zero_Eval
Types
Eval[a]
type Eval[a: +*]
Values
always
this calls the thunk every time it is needed
def always[a](fn: () -> a) -> Eval[a]
defer
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
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
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
one_Eval: Eval[Int]
true_Eval
true_Eval: Eval[Bool]
unit_Eval
unit_Eval: Eval[()]
zero_Eval
zero_Eval: Eval[Int]