sig
  module type S =
    sig
      type t
      module Date : Date_sig.S
      module Time : Time_sig.S
      type day = Date.day = Sun | Mon | Tue | Wed | Thu | Fri | Sat
      type month =
        Date.month =
          Jan
        | Feb
        | Mar
        | Apr
        | May
        | Jun
        | Jul
        | Aug
        | Sep
        | Oct
        | Nov
        | Dec
      type year = Date.year
      type second = Time.second
      type field =
          [ `Day | `Hour | `Minute | `Month | `Second | `Week | `Year ]
      val make :
        int ->
        int -> int -> int -> int -> Calendar_sig.S.second -> Calendar_sig.S.t
      val lmake :
        year:int ->
        ?month:int ->
        ?day:int ->
        ?hour:int ->
        ?minute:int ->
        ?second:Calendar_sig.S.second -> unit -> Calendar_sig.S.t
      val create : Date.t -> Time.t -> Calendar_sig.S.t
      val now : unit -> Calendar_sig.S.t
      val from_jd : float -> Calendar_sig.S.t
      val from_mjd : float -> Calendar_sig.S.t
      val convert :
        Calendar_sig.S.t -> Time_Zone.t -> Time_Zone.t -> Calendar_sig.S.t
      val to_gmt : Calendar_sig.S.t -> Calendar_sig.S.t
      val from_gmt : Calendar_sig.S.t -> Calendar_sig.S.t
      val days_in_month : Calendar_sig.S.t -> int
      val day_of_week : Calendar_sig.S.t -> Calendar_sig.S.day
      val day_of_month : Calendar_sig.S.t -> int
      val day_of_year : Calendar_sig.S.t -> int
      val week : Calendar_sig.S.t -> int
      val month : Calendar_sig.S.t -> Calendar_sig.S.month
      val year : Calendar_sig.S.t -> int
      val to_jd : Calendar_sig.S.t -> float
      val to_mjd : Calendar_sig.S.t -> float
      val hour : Calendar_sig.S.t -> int
      val minute : Calendar_sig.S.t -> int
      val second : Calendar_sig.S.t -> Calendar_sig.S.second
      val equal : Calendar_sig.S.t -> Calendar_sig.S.t -> bool
      val compare : Calendar_sig.S.t -> Calendar_sig.S.t -> int
      val hash : Calendar_sig.S.t -> int
      val is_leap_day : Calendar_sig.S.t -> bool
      val is_gregorian : Calendar_sig.S.t -> bool
      val is_julian : Calendar_sig.S.t -> bool
      val is_pm : Calendar_sig.S.t -> bool
      val is_am : Calendar_sig.S.t -> bool
      val to_unixtm : Calendar_sig.S.t -> Unix.tm
      val from_unixtm : Unix.tm -> Calendar_sig.S.t
      val to_unixfloat : Calendar_sig.S.t -> float
      val from_unixfloat : float -> Calendar_sig.S.t
      val from_date : Date.t -> Calendar_sig.S.t
      val to_date : Calendar_sig.S.t -> Date.t
      val to_time : Calendar_sig.S.t -> Time.t
      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 -> int -> int -> Calendar_sig.S.second -> Calendar_sig.S.t
          val lmake :
            ?year:int ->
            ?month:int ->
            ?day:int ->
            ?hour:int ->
            ?minute:int ->
            ?second:Calendar_sig.S.second -> unit -> Calendar_sig.S.t
          val year : int -> Calendar_sig.S.t
          val month : int -> Calendar_sig.S.t
          val week : int -> Calendar_sig.S.t
          val day : int -> Calendar_sig.S.t
          val hour : int -> Calendar_sig.S.t
          val minute : int -> Calendar_sig.S.t
          val second : Calendar_sig.S.second -> Calendar_sig.S.t
          val from_date : Date.Period.t -> Calendar_sig.S.t
          val from_time : Time.Period.t -> Calendar_sig.S.t
          val to_date : Calendar_sig.S.t -> Date.Period.t
          exception Not_computable
          val to_time : Calendar_sig.S.t -> Time.Period.t
          val ymds :
            Calendar_sig.S.t -> int * int * int * Calendar_sig.S.second
        end
      val add :
        Calendar_sig.S.t -> Calendar_sig.S.Period.t -> Calendar_sig.S.t
      val sub :
        Calendar_sig.S.t -> Calendar_sig.S.t -> Calendar_sig.S.Period.t
      val rem :
        Calendar_sig.S.t -> Calendar_sig.S.Period.t -> Calendar_sig.S.t
      val next : Calendar_sig.S.t -> Calendar_sig.S.field -> Calendar_sig.S.t
      val prev : Calendar_sig.S.t -> Calendar_sig.S.field -> Calendar_sig.S.t
    end
end