value & behavior
Start as deep as the structure goes.
A value, a function, a frontier the compiler can close around. Effect classes and budgets are proven here, across every path a call can reach.
effect io = { syscall, block };
@effects(none: {io})
@budget(alloc_per_call = 0)
fn checksum(seed: Int, n: Int) -> Int {
let mut acc = seed;
let mut i = 0;
while i < n {
acc = acc * 31 + i;
i += 1;
}
return acc;
}