AXIOM Документація Axiom
ENBLACKGRAYWHITE
Axiom · light

Типи та algebraic data types

Sum types, enum-и й payload variants — одна модель. Без nullable magic і без неявного перетворення між enum-ами.

Axiom використовує nominal identity типів, але surface syntax не змушує вас постійно писати довгі qualified names. Compiler використовує контекст там, де він однозначний.

Enum — це sum type без payload

Contextual enum resolutionAxiom
1color:2    | red3    | green4    | blue5END color67paint(color c):8    if c == red:9        // red однозначно означає color.red10        RETURN
1

Починаємо іменований ADT.

2

Варіант без payload.

5

Тип закривається як будь-який structural block.

7

Параметр задає expected type.

8

Тому red можна писати без color::red.

Result без exceptions

Error as dataAxiom
1load_port(text path) -> result<u16, io_error>:2    const text raw = fs.read_text(path)?3    const u16 port = text.parse_u16(raw)?4    RETURN ok(port)
1

Return type прямо каже: або u16, або io_error.

2

? — target surface для раннього повернення error variant; він не кидає exception.

3

Парсинг теж може повернути error.

4

Успішний variant виводиться з expected return type.

Pattern matching

Exhaustive matchAxiom
1describe(result<u16, io_error> value) -> text:2    match value:3        ok(port):4            RETURN text.format("port={}", port)5        error(permission_denied):6            RETURN "permission denied"7        error(_):8            RETURN "I/O error"
2

Тип scrutinee задає контекст усім variant names.

3

Дістаємо payload успішного результату.

5

Можна матчити вкладений error kind.

7

Fallback на решту I/O errors. Compiler перевіряє exhaustiveness.

Generic type

Generic declarationAxiom
1-- T2pair:3    T first4    T second5END pair
1

-- T оголошує type parameter для наступного declaration.

2

Звичайний structural type.

3

Поле типу T.

5

Закриття типу.