summaryrefslogtreecommitdiff
path: root/lib/kernel/vocab.ml
blob: a4e61a3ac697ca577fda23a46b4207da9dda0607 (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
(* A rite's season and rank vocabulary, as a record of operations. Carries
   functions, so it has no sexp form.

   The kernel is parameterised by type variables plus this record rather than by
   functors (spec §2.3): the safety that matters -- EF code cannot name an OF
   season -- is the same either way, and ppx_sexp_conv derives converters for
   parametric types natively. *)
type ('s, 'r) t = {
  seasons : 's list;
      (** canonical liturgical-year order. CORRECTED (final fix wave, item
          7): this used to say "Validate's contiguity check reads this" --
          false since validate.ml's own "seasons" check switched to
          {!Colitur_kernel.Rite.t}.season_runs in this branch (Plan 2
          carried item 1: EF has each season in one run, but the modern
          form's Ordinary Time does not, so the expected run sequence had
          to become rite-supplied rather than derived from this field).
          For EF specifically [Rite_ef.rite] sets season_runs to
          this very list, so the two happen to agree there, but Validate
          itself no longer reads [seasons] to build its expectation. *)
  season_to_string : 's -> string;
  season_of_string : string -> 's option;
  ranks : 'r list;
      (** documentation order, highest first. Plan 2 uses it only for the
          closure check. CORRECTED (final fix wave, item 7): this used to
          say "it is not a precedence relation until Plan 3 defines one" --
          Plan 3 did define one (RG 111's dignity ordering, Rite_ef.
          Precedence_ef.dignity/compare_dignity), but as its OWN small,
          separately-hardcoded function, not one derived from this field:
          [admit] needs Vocab_ef.rank's dignity as plain data (RG 8's four
          classes), and reusing this field's own [int list] position would
          couple that meaning to documentation order the way {!band} is
          explicitly NOT allowed to (precedence_ef.ml's own file comment).
          This field therefore still carries no precedence relation of its
          own; a rite that wanted one derived from it would have to build
          it itself. *)
  rank_to_string : 'r -> string;
  rank_of_string : string -> 'r option;
}