1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
(** The single stable result schema (parent spec §2). *)
type ('s, 'r) t = {
date : Date.t;
rite : string;
temporal : ('s, 'r) Temporal.t;
(** embedded, not flattened: it is already a coherent unit with its own
invariants, and re-listing season/week/weekday here would create two
places for them to disagree *)
observed : 'r Celebration.t;
commemorations : ('r Celebration.t * Precedence.privilege) list;
transferred_in : 'r Celebration.t option;
(** arrived here from an impeded day *)
transferred_out : ('r Celebration.t * Date.t) list;
(** celebrations that left this day, and where each one went. A list,
not an option: RG 97-98 has coinciding I-class feasts transfer
"in order" -- plural -- so a day can lose more than one. Asymmetric
with [transferred_in] deliberately: a day receives at most one
arrival, because RG 96 sends each departure to the next day that
is not I or II class, and the first to arrive occupies it. *)
omitted : ('r Celebration.t * string) list;
(** with the reason, never silent -- Task 12's no-celebration-lost
invariant reads this *)
citations : Citation.t list;
(** The day's reading references, resolved by the rite's own
{!Rite.readings}. Empty for a rite whose lectionary is not built;
for EF, exactly one [First] and one [Gospel] on every day of every
year 1583..9999 -- asserted, not assumed, by {!Validate}'s own
["citations"] / ["citations-unresolved"] checks. (This said "always
empty until Plan 4" until Task 10; the lectionary landed before
Plan 4 did, and the comment outlived its truth.) *)
formulary : Mass_formulary.t option;
(** Which Mass this day says, and how that was decided -- see
{!Mass_formulary}. [None] only for a rite with no lectionary; for
EF it is [Some] on every day of every year 1583..9999, asserted by
{!Validate}. *)
}
[@@deriving sexp]
|