ilo 26.5.0

ilo - the token-minimal programming language AI agents write
Documentation
-- `!` is the auto-unwrap operator and only applies to function CALLS.
-- It takes the Result or Optional returned by a call and unwraps it:
--   Ok(v)/non-nil → v
--   Err(e)/nil   → propagate (`!`) or abort (`!!`)
--
-- When `!` is attached to a bare ident that resolves to a plain value
-- (a local binding, a parameter, a destructured field), there is no
-- call for the operator to act on. Pre-fix, the inline default-engine
-- path skipped verify and the interpreter silently returned `nil` for
-- this shape — a soundness hazard. The verifier now rejects it with
-- ILO-T034 and points at the two canonical fixes.

-- The two correct shapes are:
--
-- (1) Match on a Result-valued binding to inspect Ok / Err:
--       ?score{~v:v;^er:0}
--
-- (2) Auto-unwrap at the producer's call site, then reference the
--     resulting value without `!`:
--       scs = producer! ...
--       use-scs scs

-- Happy path A: match on a Result-valued local.
inspect-result>R n t;score=lookup-score 1;?score{~v:~v;^er:^er}

-- Helper used by `inspect-result` — returns a Result, exercised by the
-- engine harness through `inspect-result` rather than directly. Braceless
-- guard form is used so the body's early-return surfaces without the
-- discarded-result hint that the braced `cond{^"err"}` shape triggers.
lookup-score id:n>R n t;<id 1 ^"id must be positive";~*id 10

-- Happy path B: unwrap at the producer's call site, reference the
-- resulting plain Number afterwards (no `!` on the local).
double-unwrapped>R n t;v=lookup-score! 4;~*v 2

-- run: inspect-result
-- out: 10

-- run: double-unwrapped
-- out: 80