A Soil map: entries kept sorted by the carried order (a sorted vec
by resolved decision; swap for a tree behind this API only if
profiling demands it — plan 01).
An opaque handle (FFI values, abstract types). Identity — for eq,
compare, and hash under the opaque strategy — is the address of
the containing allocation, so two handles are equal iff they are the
same allocation.
A Soil closure, as a boxed Rust callable (resolved decision, impl
plan §1): plan-01 tests and builtins pass Rust closures, soil0’s
interpreter captures AST + environment, compiled code later wraps an
extern "C" function and its environment. One invocation path.