<!-- Value Types -->
# Special forms keep meaning visible before tools interpret it.
This page explains AEON value choices as language features. It is not the exhaustive lookup table. Use it when you want to understand why AEON separates ordinary numbers from NaN, absence from custom null reasons, and local time authority from a bare UTC offset.
The reference page lists every type mechanically. This page focuses on the forms that change how authors and tools reason about a document.
```aeon
title:string = "Daily note"
body:prose = >`
Multiline text that can carry prose.
`
count:number = 42
reading:nan = NaN
limit:infinity = Infinity
ready:boolean = true
state:toggle = on
missing:null = !notSet
color:hex = #ff00aa
bits:radix[2] = %1011
payload:base64 = $QmFzZTY0IQ==
day:date = 2026-05-05
clock:time = 09:30Z
stamp:datetime = 2026-05-05T09:30:00Z
zoned:zrut = 2026-05-05T09:30Z&Australia/Melbourne
```
[Special values](#special-values)
[Date and time](#date-time)
[Semantic comments](#semantic-comments)
[Open reference](/type-reference.php)
<!-- Special Values -->
## Absence and numeric edge cases stay explicit.
AEON keeps ordinary numbers separate from IEEE-style edge cases. NaN belongs to the nan literal family, and Infinity belongs to the infinity family. They are not silently accepted as ordinary number values.
Null is also typed. Instead of collapsing every kind of absence into one undifferentiated value, AEON lets a document say whether something is not set, not applicable, tombstoned, or absent for a custom reason.
The advantage shows up at schema time. A consumer can decide whether a field is allowed to contain NaN, Infinity, or a null reason at all. If the schema rejects those forms, downstream materialized values can be used without silently carrying an edge case into math, storage, or business logic.
```aeon
count:number = 42
reading:nan = NaN
negativeReading:nan = -NaN
limit:infinity = Infinity
floor:infinity = -Infinity
email:null = !notSet
fax:null = !notApplicable
oldRecord:null = !tombstone
review:null = !"awaiting manual review"
```
<!-- Date and Time -->
## ZRUT preserves the instant and the local time authority.
Plain date values are calendar dates. Plain time values are times of day. A datetime can include UTC or an offset, which is enough when the only thing you need is the instant.
ZRUT (Zoned Round-trip Universal Time) is important when the local zone is part of the meaning. An offset like +10:00 records one numeric relationship to UTC, but it does not preserve the civic time zone that produced it. Australia/Melbourne carries daylight-saving rules, future rendering context, and audit meaning that a bare offset cannot recover.
```aeon
eventDate:date = 2026-05-05
localTime:time = 09:30
utcTime:time = 09:30Z
offsetTime:time = 09:30+10:00
published:datetime = 2026-05-05T09:30:00Z
localPublication:zrut = 2026-05-05T09:30:00Z&Australia/Melbourne
```
<!-- Semantic Comments -->
## Comments can carry meaning without becoming data.
AEON separates ordinary data bindings from semantic comment channels. These channels can carry documentation, hints, annotations, and ecosystem signals while remaining outside the core assignment stream.
The safety rule is simple: comments can inform tools and readers, but they do not create bindings, change path identity, affect reference legality, or silently alter values.
```aeon
//! format:aeon
//# Billing fields shown on customer invoices.
//@ ui(section="billing", priority=1)
//? total should match the line-item sum after discounts.
//[ profile: "invoice.public.v1"
//{ structure: "totals are grouped by currency"
//( instruction: "consumer may calculate display totals"
invoice:object = {
total:number = 7_000
}
```
### Host directive
- **Syntax:** `//!`
- **When to use:** Use at the file header for processor discovery or pre-parser routing. Outside that header slot, it is just a plain comment.
### Documentation
- **Syntax:** `//#`
- **When to use:** Use for reader-facing notes that explain a nearby binding, element, or container.
### Annotation
- **Syntax:** `//@`
- **When to use:** Use for machine-readable metadata that tools may understand, such as UI grouping, workflow state, or audience tags.
### Hint
- **Syntax:** `//?`
- **When to use:** Use for advisory guidance, editor hints, schema-profile notes, or human review reminders.
### Profile
- **Syntax:** `//[`
- **When to use:** Reserved for profile-related ecosystem notes. Use when the comment is about policy or profile-driven interpretation.
### Structure
- **Syntax:** `//{`
- **When to use:** Reserved for structural notes. Use when the comment is about grouping, shape, or document organization.
### Instruction
- **Syntax:** `//(`
- **When to use:** Reserved for instruction-like notes. Use for consumer-facing processing guidance that must not change core parsing.