aboutsummaryrefslogtreecommitdiff
path: root/lib/rites/rite_ef/rite_ef.mli
blob: a4b5d8745c3fbdbe18e713653b1a9593df181ac2 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(** The EF (1962) rite module: this library's top-level module (its filename
    matches the library's own name "rite_ef", so dune uses it as the
    library's entry point directly rather than generating one -- see the
    .ml's own comment). Re-exports every sibling module this library
    defines, so [Rite_ef.Vocab_ef], [Rite_ef.Temporal_ef] and
    [Rite_ef.Precedence_ef] keep resolving exactly as they did before this
    module existed. *)

module Vocab_ef = Vocab_ef
module Temporal_ef = Temporal_ef
module Precedence_ef = Precedence_ef
module Lectionary_ef = Lectionary_ef
module Rubrics_ef = Rubrics_ef

(** The EF rite, bundled (design spec's [RITE] signature, realised as a
    {!Colitur_kernel.Rite.t} value rather than a functor -- see rite.mli):
    - [id], [vocab], [year_start], [temporal], [anchors]: {!Temporal_ef}
      unchanged (RG 71-77 seasons, RG 91's named movable days).
    - [rules]: {!Precedence_ef}'s three RG 91/92-95/108-111 functions,
      wrapped as one {!Colitur_kernel.Precedence.rules} record.
    - [season_runs]: {!Vocab_ef.seasons} itself -- the EF liturgical year
      visits each of its eight seasons exactly once, in that same order
      (Advent-anchored, matching [year_start]), so the expected
      run-length-compressed sequence {!Colitur_kernel.Rite.t.season_runs}
      wants IS the vocabulary's own canonical list, not a separate one.
    - [transfer_target]: {!Precedence_ef.transfer_target}, RG 96 (see that
      value's own documentation for the termination and forward-progress
      argument {!Colitur_kernel.Rite.t.transfer_target}'s contract requires).
    - [readings]: {!Lectionary_ef.readings} partially applied to the caller's
      own [~lectionary] and [~commons] -- the observed celebration's own
      proper, else (for a saint who is the day's observed office) his
      assigned Common from data/ef/commons.sexp, else the day's own temporal
      slug, else (a weekday with no entry of its own) the preceding Sunday's
      temporal slug, in data/ef/lectionary.sexp. See {!Lectionary_ef.readings}
      for why the Common is consulted second rather than last.
    - [creed]: {!Rubrics_ef.creed}, RG 475-476 -- whether the Creed is said.
      The first rubric in this phase governing a part of Mass rather than
      occurrence/precedence.

    Deliberately carries no [sanctoral]/[lectionary] fields the way the
    original design-doc sketch of [RITE] does: {!Colitur_kernel.Rite.t} (the
    type actually shipped, Plan 2) keeps the sanctoral {!Colitur_kernel.Layer.t}
    a separate argument to {!Colitur_kernel.Calendar.year}/[day] rather than
    embedding it here, so a caller can load data/ef/sanctoral.sexp (plus
    data/ef/adjustments.sexp's overlay) however suits it -- bin/main.ml's
    [load_ef_layer] is the one this module ships with. [~lectionary] here is
    the exact same discipline (fix round 1, coordinator review: [context]
    used to be a plain value that loaded data/ef/lectionary.sexp as a side
    effect of {!Lectionary_ef} being linked, which broke every subcommand
    that never touches lectionary data at all the moment that file was
    missing from a bare build -- see the task report). A future
    diocesan/proper lectionary overlay has a caller-side seam to attach to
    for the same reason the sanctoral overlay already does. [~commons]
    travels the same seam, and is deliberately REQUIRED rather than
    defaulted -- see this module's .ml for why a silently-defaulted
    {!Lectionary_ef.Commons.empty} would be undetectable by any of the five
    validation layers. *)
val context :
  lectionary:Colitur_kernel.Lectionary.t ->
  commons:Lectionary_ef.Commons.t ->
  (Vocab_ef.season, Vocab_ef.rank) Colitur_kernel.Rite.t