Optionality via variants
ral has no Option type and no null. Optionality — a value that may be present
or absent — is expressed as an open variant, idiomatically `some v and
`none, passed as an ordinary value and discriminated by case.
This follows from two other commitments:
- Arguments are not where optionality lives, because every invocable has fixed arity: the caller always supplies every argument, and the value it supplies carries the presence or absence.
- Absence is data, not a sentinel: a null that inhabits every type reintroduces exactly the silent collapse the value/command separation removes.
A variant makes the two cases distinct in the type and forces the consumer to handle both.
Record fields give a second, structural route to the same end — scoped labels and spread shadowing express defaults and optional fields at the level of data.
This is a hard rule: do not add an Option/Maybe builtin or a null literal;
reach for an open variant.