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. *) type 'r t = { slug : Slug.t; names : Names.t; rank : 'r; 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 ~colour ?(subject = Subject.Temporal) ?(citations = []) ~layer () = { slug; names; rank; colour; subject; citations; layer }