sig
  module type S =
    sig
      type t
      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
      type field = [ `Day | `Month | `Week | `Year ]
      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 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.t -> 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.t -> Date_sig.S.month
      val year : Date_sig.S.t -> Date_sig.S.year
      val to_jd : Date_sig.S.t -> int
      val to_mjd : Date_sig.S.t -> int
      val equal : Date_sig.S.t -> Date_sig.S.t -> bool
      val compare : Date_sig.S.t -> Date_sig.S.t -> int
      val hash : Date_sig.S.t -> 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 t
          val empty : t
          val add : t -> t -> t
          val sub : t -> t -> t
          val opp : t -> t
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val hash : t -> 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.t
          val month : int -> Date_sig.S.t
          val week : int -> Date_sig.S.t
          val day : int -> Date_sig.S.t
          exception Not_computable
          val nb_days : Date_sig.S.t -> int
          val ymd : Date_sig.S.t -> int * int * int
        end
      val add : Date_sig.S.t -> Date_sig.S.Period.t -> Date_sig.S.t
      val sub : Date_sig.S.t -> Date_sig.S.t -> Date_sig.S.Period.t
      val rem : Date_sig.S.t -> Date_sig.S.Period.t -> Date_sig.S.t
      val next : Date_sig.S.t -> Date_sig.S.field -> Date_sig.S.t
      val prev : Date_sig.S.t -> Date_sig.S.field -> Date_sig.S.t
      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
end