AllDayOccurrence

AllDayOccurrence(id) :: # (opaque)

An identified civil-day selection, including occurrences with empty coverage. Pair an application series ID with the original date for recurrence identity. Duration counts civil days, never fixed 24-hour elapsed quantities.

cursor : id, Date, U64, ZoneRules -> Try(Cursor(id), [InvalidDuration, OutOfRange, OutsideValidity])

Constant calendar work; zone interpretation is deferred to the cursor. Both the source and exclusive end must fit the source calendar and rules.

id : AllDayOccurrence(id) -> id

Return the application identifier; equal coverage does not make two events identical.

date : AllDayOccurrence(id) -> Date

Return the source calendar date, before any zone interpretation.

days : AllDayOccurrence(id) -> U64

Return the positive number of civil days covered by the declaration, not elapsed 24-hour units.

selection : AllDayOccurrence(id) -> ResolvedSelection

Return the immutable interpreted civil selection, including its original rules and disconnected pieces.

coverage : AllDayOccurrence(id) -> Coverage

Return the selected timeline pieces. A skipped date may have empty coverage; repeated labels can produce disconnected pieces.

to_inspect : AllDayOccurrence(id) -> Str

Return a bounded diagnostic summary without advancing cursors or enumerating occurrences. Use typed accessors for application logic; this text is not a storage format.

Batch : {
    segments : U64,
    buffered : U64,
    status : [Complete(AllDayOccurrence(id)), Limited({ cursor : Cursor(id), reason : [WorkLimit, BufferLimit] })],
}

Outcome of interpreting one all-day occurrence. Limited retains a cursor; Complete supplies the occurrence even when its coverage is empty.

Cursor

AllDayOccurrence.Cursor(id) :: # (opaque)

Pending interpretation of an all-day declaration. Retain this value when a zone work or buffer limit stops collection.

collect : Cursor(id), SelectionLimits -> Try(Batch(id), [OutOfRange])

Advance interpretation within the supplied zone segment/member limits. Resume Limited with its returned cursor; only Complete supplies a fully interpreted occurrence.

to_inspect : Cursor(id) -> Str

Return a bounded diagnostic summary without advancing cursors or enumerating occurrences. Use typed accessors for application logic; this text is not a storage format.