OxL Справочник OxL
РусскийEnglish

3.6 Псевдонимы, новые и уточнённые типы

oxl
type Bytes2 = [u8; 2]                     // псевдоним, тот же тип
type UserId = distinct u64                // новый тип, без неявных приведений
type Port   = u16 where 1..=65535         // уточнённый тип
type Name   = str where len(1..=64)
type Email  = str where matches(re".+@.+\..+")
  • distinct T создаёт новый номинальный тип с представлением T. Конструктор UserId(5), извлечение id.raw. Операторы и методы T не наследуются, если не объявлен @derive(...).
  • Уточнённый тип T where P — distinct-тип с инвариантом P (comptime-выражение над self или сокращения len(range), matches(re), диапазон a..=b).
  • Получение значения уточнённого типа: (1) литерал-константа — проверка при компиляции; (2) Port.from(x) → Port | InvalidValue; (3) десериализация — проверка автоматически (§9.4); (4) Port.unchecked(x) — только в unsafe.
  • Уточнение прямо в поле (name: str where len(1..=64)) объявляет анонимный уточнённый тип с теми же правилами.
  • Значение уточнённого типа неявно приводится к базовому типу (Port → u16), обратно — нет.

refinement-violated

См. также

Исходник: docs/spec/oxl-standard.md