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 }