From d532c3b2cf941d2fe0c3c84f2c4090f14e869ef0 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Tue, 11 Aug 2026 11:15:18 +0200 Subject: kernel(date): ISO-8601 rendering, validating parse, sexp converters Adds sexplib and ppx_sexp_conv to the project and wires the ppx into the kernel library. Date's sexp form is an ISO-8601 atom rather than the opaque rata die, so data files stay human-editable and parsing revalidates the 1583..9999 domain. --- lib/kernel/date.mli | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'lib/kernel/date.mli') diff --git a/lib/kernel/date.mli b/lib/kernel/date.mli index b684d61..2f632c8 100644 --- a/lib/kernel/date.mli +++ b/lib/kernel/date.mli @@ -3,7 +3,7 @@ arithmetic and comparison are total and cheap. *) type t -type weekday = Sun | Mon | Tue | Wed | Thu | Fri | Sat +type weekday = Sun | Mon | Tue | Wed | Thu | Fri | Sat [@@deriving sexp] (** [make ~year ~month ~day] validates the date; rejects a month/day out of range and any year outside 1583..9999. *) @@ -21,3 +21,16 @@ val to_rata : t -> int val of_rata : int -> t val add_days : t -> int -> t val compare : t -> t -> int + +(** ISO-8601 rendering and validating parsing. [of_iso8601] enforces the same + domain as {!make}. *) +val to_iso8601 : t -> string +val of_iso8601 : string -> (t, string) result + +val weekday_to_string : weekday -> string + +(** Sexp form is an ISO-8601 atom, e.g. [2026-04-05]. [t_of_sexp] validates and + raises [Of_sexp_error] on a malformed or out-of-domain date; loaders convert + that to a [result]. *) +val t_of_sexp : Sexplib0.Sexp.t -> t +val sexp_of_t : t -> Sexplib0.Sexp.t -- cgit v1.3