sig
  type field = Period.date_field
  type -'a date constraint 'a = [< field ]
  type t = Date_sig.S.field Date_sig.S.date
  type day = Sun | Mon | Tue | Wed | Thu | Fri | Sat
  type month =
      Jan
    | Feb
    | Mar
    | Apr
    | May
    | Jun
    | Jul
    | Aug
    | Sep
    | Oct
    | Nov
    | Dec
  type year = int
  exception Out_of_bounds
  exception Undefined
  val make : Date_sig.S.year -> int -> int -> Date_sig.S.t
  val lmake :
    year:Date_sig.S.year -> ?month:int -> ?day:int -> unit -> Date_sig.S.t
  val make_year : int -> [< `Year ] Date_sig.S.date
  val make_year_month : int -> int -> [< `Month | `Year ] Date_sig.S.date
  val today : unit -> Date_sig.S.t
  val from_jd : int -> Date_sig.S.t
  val from_mjd : int -> Date_sig.S.t
  val from_day_of_year : Date_sig.S.year -> int -> Date_sig.S.t
  val days_in_month :
    [< Date_sig.S.field > `Month `Year ] Date_sig.S.date -> int
  val day_of_week : Date_sig.S.t -> Date_sig.S.day
  val day_of_month : Date_sig.S.t -> int
  val day_of_year : Date_sig.S.t -> int
  val week : Date_sig.S.t -> int
  val month :
    [< Date_sig.S.field > `Month ] Date_sig.S.date -> Date_sig.S.month
  val year : [< Date_sig.S.field > `Year ] Date_sig.S.date -> Date_sig.S.year
  val to_jd : Date_sig.S.t -> int
  val to_mjd : Date_sig.S.t -> int
  val equal :
    [< field ] Date_sig.S.date -> [< field ] Date_sig.S.date -> bool
  val compare :
    [< field ] Date_sig.S.date -> [< field ] Date_sig.S.date -> int
  val hash : [< field ] Date_sig.S.date -> int
  val is_valid_date : Date_sig.S.year -> int -> int -> bool
  val is_leap_day : Date_sig.S.t -> bool
  val is_gregorian : Date_sig.S.t -> bool
  val is_julian : Date_sig.S.t -> bool
  val to_unixtm : Date_sig.S.t -> Unix.tm
  val from_unixtm : Unix.tm -> Date_sig.S.t
  val to_unixfloat : Date_sig.S.t -> float
  val from_unixfloat : float -> Date_sig.S.t
  val to_business : Date_sig.S.t -> Date_sig.S.year * int * Date_sig.S.day
  val from_business :
    Date_sig.S.year -> int -> Date_sig.S.day -> Date_sig.S.t
  val int_of_day : Date_sig.S.day -> int
  val day_of_int : int -> Date_sig.S.day
  val int_of_month : Date_sig.S.month -> int
  val month_of_int : int -> Date_sig.S.month
  module Period :
    sig
      type +'a p constraint 'a = [< field ]
      type +'a period = 'a p constraint 'a = [< field ]
      type t = Period.date_field period
      val empty : [< Period.date_field ] period
      val add :
        ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
      val sub :
        ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
      val opp : ([< Period.date_field ] as 'a) period -> 'a period
      val equal :
        [< Period.date_field ] period ->
        [< Period.date_field ] period -> bool
      val compare :
        [< Period.date_field ] period -> [< Period.date_field ] period -> int
      val hash : [< Period.date_field ] period -> int
      val make : int -> int -> int -> Date_sig.S.t
      val lmake : ?year:int -> ?month:int -> ?day:int -> unit -> Date_sig.S.t
      val year : int -> [< Date_sig.S.field > `Year ] period
      val month : int -> [< Date_sig.S.field > `Month `Year ] period
      val week : int -> [< Date_sig.S.field > `Day `Week ] period
      val day : int -> [< Date_sig.S.field > `Day `Week ] period
      exception Not_computable
      val nb_days : [< field ] period -> int
      val safe_nb_days : [< `Day | `Week ] period -> int
      val ymd : [< field ] period -> int * int * int
    end
  val add :
    ([< Date_sig.S.field ] as 'a) Date_sig.S.date ->
    'Date_sig.S.Period.period -> 'Date_sig.S.date
  val sub :
    ([< Date_sig.S.field ] as 'a) Date_sig.S.date ->
    'Date_sig.S.date ->
    [< Date_sig.S.field > `Day `Week ] Date_sig.S.Period.period
  val precise_sub :
    ([< Date_sig.S.field ] as 'a) Date_sig.S.date ->
    'Date_sig.S.date -> Date_sig.S.Period.t
  val rem :
    ([< Date_sig.S.field ] as 'a) Date_sig.S.date ->
    'Date_sig.S.Period.period -> 'Date_sig.S.date
  val next :
    ([< Date_sig.S.field ] as 'a) Date_sig.S.date -> '-> 'Date_sig.S.date
  val prev :
    ([< Date_sig.S.field ] as 'a) Date_sig.S.date -> '-> 'Date_sig.S.date
  val is_leap_year : Date_sig.S.year -> bool
  val same_calendar : Date_sig.S.year -> Date_sig.S.year -> bool
  val days_in_year : ?month:Date_sig.S.month -> Date_sig.S.year -> int
  val weeks_in_year : Date_sig.S.year -> int
  val week_first_last : int -> Date_sig.S.year -> Date_sig.S.t * Date_sig.S.t
  val nth_weekday_of_month :
    Date_sig.S.year ->
    Date_sig.S.month -> Date_sig.S.day -> int -> Date_sig.S.t
  val century : Date_sig.S.year -> int
  val millenium : Date_sig.S.year -> int
  val solar_number : Date_sig.S.year -> int
  val indiction : Date_sig.S.year -> int
  val golden_number : Date_sig.S.year -> int
  val epact : Date_sig.S.year -> int
  val easter : Date_sig.S.year -> Date_sig.S.t
  val carnaval : Date_sig.S.year -> Date_sig.S.t
  val mardi_gras : Date_sig.S.year -> Date_sig.S.t
  val ash : Date_sig.S.year -> Date_sig.S.t
  val palm : Date_sig.S.year -> Date_sig.S.t
  val easter_friday : Date_sig.S.year -> Date_sig.S.t
  val easter_saturday : Date_sig.S.year -> Date_sig.S.t
  val easter_monday : Date_sig.S.year -> Date_sig.S.t
  val ascension : Date_sig.S.year -> Date_sig.S.t
  val withsunday : Date_sig.S.year -> Date_sig.S.t
  val withmonday : Date_sig.S.year -> Date_sig.S.t
  val corpus_christi : Date_sig.S.year -> Date_sig.S.t
end