sig
  type +'a period constraint 'a = [< Period.date_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 length : [< Period.date_field ] period -> Time_sig.S.second
  val mul : ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
  val div : ([< Period.date_field ] as 'a) period -> 'a period -> 'a period
  val make : int -> int -> Time_sig.S.second -> [< Period.date_field ] period
  val lmake :
    ?hour:int ->
    ?minute:int ->
    ?second:Time_sig.S.second -> unit -> [< Period.date_field ] period
  val hour : int -> [< Period.date_field ] period
  val minute : int -> [< Period.date_field ] period
  val second : Time_sig.S.second -> [< Period.date_field ] period
  val to_seconds : [< Period.date_field ] period -> Time_sig.S.second
  val to_minutes : [< Period.date_field ] period -> float
  val to_hours : [< Period.date_field ] period -> float
end