summaryrefslogtreecommitdiff
path: root/lib/kernel/celebration.ml
blob: eb4249e5d2224afe043b217fbd90a079276a0bfb (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
open Sexplib0.Sexp_conv

(* A celebration as computed or as loaded from a layer.

   One type parameter, not two: a celebration has no season of its own --
   season is contextual to the day, and lives in Temporal.t, which pairs a
   celebration with the day it falls on. A phantom 's parameter would compile,
   but would carry no information while forcing every consumer (Layer,
   Overlay, and later Precedence and Calendar) to thread a variable that
   means nothing. *)
(* Whether this celebration can be the observed day at all. The 1960 reform
   reduced many feasts to a bare commemoration; they retain a rank (RG 111 orders
   admitted commemorations by dignity) but can never be observed. NOT a fifth
   rank: RG 8 fixes the classes at four. *)
type status = Feast | Commemoration_only [@@deriving sexp]

type 'r t = {
  slug : Slug.t;
  names : Names.t;
  rank : 'r;
  status : status;
  colour : Colour.t;
  subject : Subject.t;
  citations : Citation.t list;
  layer : string;  (** provenance: "temporal", a layer id, or an overlay id *)
}
[@@deriving sexp]

let make ~slug ?(names = Names.empty) ~rank ?(status = Feast) ~colour
    ?(subject = Subject.Temporal) ?(citations = []) ~layer () =
  { slug; names; rank; status; colour; subject; citations; layer }