Subtyping
A <: B declares A is a subtype of B. Two universal bounds frame the lattice: A <: Top and Bot <: A hold for every A.
Beyond the declared <: graph, the substrate has three built-in subtyping sources (oxc-check/src/infer.rs::types_compatible):
- Numeric tower:
Nat <: Int <: RealandNat <: Int <: Decimal.Moneyis not in the tower — there is no implicitInt → Money;Moneyonly arises through the result-side widening of monetary arithmetic (Numeric tower and coercion),Money ▷ Decimal ▷ Real ▷ Int. - Covariant collections:
List<A> <: List<B>andOption<A> <: Option<B>iffA <: B(written[A]/A?). - Invariant elsewhere: tuples,
fn(…) -> _, and generic applications subtype only by equality.
Real, Decimal, and Money are exact arbitrary-precision rationals (BigRational); source numeric literals parse to exact rationals with no f64 round-trip, so 0.1 + 0.2 == 0.3 (RFD 0016, oxc-reasoning/src/compile/value.rs).