Refinement with multi-field predicates
Area: Refinement & types Teaches: a refinement predicate is an ordinary boolean expression — it can read several fields and combine them with
&&/||, comparisons, and string equality. Prerequisites: refinement (iff/where). Run:ox build examples/multi_field_refinement && ox run-scenario examples/multi_field_refinement
A single iff refinement classifies a Person by two fields at once:
pub type ActiveAdult <: Person iff {
self.age >= 18 && self.status == "active"
};
ActiveAdult is the subset of people who are both adults and active. The predicate is evaluated per individual at query time against that individual’s declared fields — no membership is stored.
Running it
The scenario registers four people; only those satisfying both conjuncts are classified:
alice age=25 status="active" → ActiveAdult
bob age=12 status="active" → not (fails age >= 18)
carol age=30 status="inactive" → not (fails status == "active")
dave age=45 status="active" → ActiveAdult
so active_adults returns 2 rows (alice, dave) out of the 4 in all_people.
This example is compiled and run in CI; its runtime behaviour is pinned by a corpus test (oxc-runtime/tests/examples_corpus.rs).