(* 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; }