sig
  type +'a period constraint 'a = [< date_field ]
  type t = Period.date_field Period.S.period
  val empty : [< date_field ] Period.S.period
  val add :
    ([< Period.date_field ] as 'a) Period.S.period ->
    'Period.S.period -> 'Period.S.period
  val sub :
    ([< Period.date_field ] as 'a) Period.S.period ->
    'Period.S.period -> 'Period.S.period
  val opp :
    ([< Period.date_field ] as 'a) Period.S.period -> 'Period.S.period
  val equal :
    [< date_field ] Period.S.period ->
    [< date_field ] Period.S.period -> bool
  val compare :
    [< date_field ] Period.S.period -> [< date_field ] Period.S.period -> int
  val hash : [< date_field ] Period.S.period -> int
end