sig   type date_field = [ `Day | `Month | `Week | `Year ]   module type S =     sig       type +'a period constraint 'a = [< Period.date_field ]       type t = Period.date_field Period.S.period       val empty : [< Period.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 :         [< Period.date_field ] Period.S.period ->         [< Period.date_field ] Period.S.period -> bool       val compare :         [< Period.date_field ] Period.S.period ->         [< Period.date_field ] Period.S.period -> int       val hash : [< Period.date_field ] Period.S.period -> int     end end