3/:      !"#$%&'()*+,-./0123456789(C) 2013 Mihaly BaraszBSD3, see LICENSE!Mihaly Barasz <mihaly@barasz.com> experimental non-portableNone<=OT<Type class that defines access to the "time" part of a type.KYou only need to define one of the two methods, whichever is more natural.<Type class that defines access to the "date" part of a type.,You can implement either of the two methods.AType class to provide correct roll-over behavior for time lenses.Used exactly as  ;, but for values that have only "time" and no "date" part.KIf the time rolls-over more than 24 hours the day carry is discarded. Ex.:let t = TimeOfDay 1 12 3t01:12:03t & flexT.seconds +~ (-7200)23:12:03AType class to provide correct roll-over behavior for date lenses.Used exactly as  ;, but for values that have only "date" and no "time" part. FType class to provide correct roll-over behavior for date-time lenses.*See examples in the general overview part.View : as an ;# day number in the Julian calendar.)See the description at the definition of :.View :7 as a triple of (year,month,day) in Gregorian calendar.)See the description at the definition of < / =.View >5 as a fractional day in the modified Julian calendar.See the description of ? and @.Lens into the year value of a .'Warning: this is not a proper lens for > and A: it only obeys the lens laws if used with valid values. When the year value in a date is modified the month and day values might also change. This happens when the original date was a February 29th and we change to a non-leap year.Lens into the month value of a .'Warning: this is not a proper lens for > and A: it only obeys the lens laws if used with valid values. The updated month value will be clipped to a valid month value. Also note that the day value might also be modified (clipped to a valid day in that month).Lens into the day value of a .'Warning: this is not a proper lens for > and A: it only obeys the lens laws if used with valid values. The updated day value will be clipped to a valid day value in the given year-month.Lens into the hour value of a .'Warning: this is not a proper lens for A9: it only obeys the lens laws if used with valid values. Lens into the minute value of a .'Warning: this is not a proper lens for A9: it only obeys the lens laws if used with valid values. Lens into the second value of a .'Warning: this is not a proper lens for A9: it only obeys the lens laws if used with valid values. Trivial isomorphism between A and >.We view >0 values as being in the UTC time zone. This is ! applied to B.!Isomorphism between A and > for the given C."Lens into the > part of D.: EFG !"#$%&'()*+,-./0123456#  !"#  ! "+   EFG !"#$%&'()*+,-./0123456H      !"#$%&'()*+,-./0123456789:;<=>9?@9?A9BC9:D9EF9GH9IJ9IK9BLMNOP(lens-datetime-0.3-3Fw1oKVCiYhEIe8Aub39ljData.Time.LensTimeabletime timeAsDiffDateabledate _dateFlex FlexibleTimeflexT FlexibleDateflexDFlexibleDateTimeflexDTFlexTime FlexDateTimeflexDateflexTODFlexDateflexYear flexMonthflexDay julianDay gregorianDatejulianDTyearsmonthsdayshoursminutesseconds utcAsLocalutcInTZ zonedAsLocal$fTimeableFlexTime$fTimeableFlexDateTime$fTimeableTimeOfDay$fTimeableZonedTime$fTimeableLocalTime$fTimeableUTCTime$fDateableFlexDateTime$fDateableFlexDate $fDateableDay$fDateableZonedTime$fDateableLocalTime$fDateableUTCTime$fFlexibleTimeTimeOfDay$fFlexibleDateDay$fFlexibleDateTimeZonedTime$fFlexibleDateTimeUTCTime$fFlexibleDateTimeLocalTime$fField3FlexDateFlexDateIntInt$fField2FlexDateFlexDateIntInt&$fField1FlexDateFlexDateIntegerInteger$fShowFlexDate$fShowFlexDateTime$fShowFlexTime time-1.6.0.1Data.Time.Calendar.DaysDay integer-gmpGHC.Integer.TypeIntegerData.Time.Calendar.Gregorian fromGregorian toGregorianData.Time.LocalTime.LocalTime LocalTimeModifiedJulianDayData.Time.LocalTime.TimeOfDaytimeOfDayToDayFractionData.Time.Clock.UTCUTCTimeData.Time.LocalTime.TimeZoneutcTimeZone ZonedTimeflexDateTriplegregorianUnflexdiffTOD