summaryrefslogtreecommitdiff
path: root/lib/kernel/liturgical_day.ml
blob: c3ecb376d40db9a560e523275f321141ff4c8d11 (plain) (blame)
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
open Sexplib0.Sexp_conv

(* 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;  (** always empty until Plan 4 *)
  formulary : Mass_formulary.t option;
      (** which Mass the day says, and how that was decided; [None] only for
          a rite with no lectionary -- see {!Mass_formulary} *)
  creed : bool;  (** whether the Creed is said at this day's Mass; see {!Rite.t.creed} *)
  gloria : bool;  (** whether the Gloria in excelsis is said; see {!Rite.t.gloria} *)
  preface : Preface.t option;  (** which preface is said; see {!Rite.t.preface} *)
}
[@@deriving sexp]