Module Slambda
type value_halves = Slambdaeval.halves = {slv_comptime : Slambdaeval.value Slambdaeval.Or_missing.t;slv_runtime : Lambda.lambda;
}val eval : (Lambda.slambda -> Lambda.slambda) -> Lambda.lambda -> value_halveseval inspect tlambda fractures tlambda into slambda, passes it through inspect, then evaluates it. It returns a value_halves so that the caller can save/manipulate the compile-time part of the value represented by the tlambda.
inspect can arbitrarily modify the slambda but it's expected to be used by drivers to print the slambda if requested and return it unchanged.