rename CalendarDuration to CalendarDiffDays
authorAshley Yakeley <ashley@semantic.org>
Sat, 13 Jan 2018 05:02:49 +0000 (21:02 -0800)
committerAshley Yakeley <ashley@semantic.org>
Sat, 13 Jan 2018 05:02:49 +0000 (21:02 -0800)
changelog.md
lib/Data/Time/Calendar.hs
lib/Data/Time/Calendar/CalendarDiffDays.hs [new file with mode: 0644]
lib/Data/Time/Calendar/Duration.hs [deleted file]
lib/Data/Time/Calendar/Gregorian.hs
lib/Data/Time/Calendar/Julian.hs
test/main/Test/Calendar/Duration.hs
time.cabal

index f9ad879..4fc0651 100644 (file)
@@ -2,7 +2,7 @@
 
 ## [1.9]
 - new DayOfWeek type
-- new CalendarDuration type
+- new CalendarDiffDays type
 - new addLocalTime, diffLocalTime
 - formatting: %Ez and %EZ for ±HH:MM format
 - parseTimeM: use MonadFail constraint when supported
index 77a844f..fc5ace4 100644 (file)
@@ -1,13 +1,13 @@
 module Data.Time.Calendar
 (
     module Data.Time.Calendar.Days,
-    module Data.Time.Calendar.Duration,
+    module Data.Time.Calendar.CalendarDiffDays,
     module Data.Time.Calendar.Gregorian,
     module Data.Time.Calendar.Week
 ) where
 
 import Data.Time.Calendar.Days
-import Data.Time.Calendar.Duration
+import Data.Time.Calendar.CalendarDiffDays
 import Data.Time.Calendar.Gregorian
 import Data.Time.Calendar.Week
 import Data.Time.Format()
diff --git a/lib/Data/Time/Calendar/CalendarDiffDays.hs b/lib/Data/Time/Calendar/CalendarDiffDays.hs
new file mode 100644 (file)
index 0000000..7d68cdb
--- /dev/null
@@ -0,0 +1,59 @@
+module Data.Time.Calendar.CalendarDiffDays
+    (
+        -- * Calendar Duration
+        module Data.Time.Calendar.CalendarDiffDays
+    ) where
+
+#if MIN_VERSION_base(4,8,0)
+#else
+import Data.Monoid
+#endif
+
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup
+#endif
+
+data CalendarDiffDays = CalendarDiffDays
+    { calendarMonths :: Integer
+    , calendarDays :: Integer
+    } deriving Eq
+
+#if MIN_VERSION_base(4,9,0)
+-- | Additive
+instance Semigroup CalendarDiffDays where
+    CalendarDiffDays m1 d1 <> CalendarDiffDays m2 d2 = CalendarDiffDays (m1 + m2) (d1 + d2)
+#endif
+
+-- | Additive
+instance Monoid CalendarDiffDays where
+    mempty = CalendarDiffDays 0 0
+#if MIN_VERSION_base(4,9,0)
+    mappend = (<>)
+#else
+    mappend (CalendarDiffDays m1 d1) (CalendarDiffDays m2 d2) = CalendarDiffDays (m1 + m2) (d1 + d2)
+#endif
+
+-- | Show in ISO 8601 "PyyYmmMddD" format.
+instance Show CalendarDiffDays where
+    show dur@(CalendarDiffDays m d) = let
+        (y,my) = quotRem m 12
+        ys = if y == 0 then "" else show y ++ "Y"
+        ms = if my == 0 then "" else show my ++ "M"
+        ds = if d == 0 then "" else show d ++ "D"
+        in if dur == mempty then "P0D" else "P" ++ ys ++ ms ++ ds
+
+calendarDay :: CalendarDiffDays
+calendarDay = CalendarDiffDays 0 1
+
+calendarWeek :: CalendarDiffDays
+calendarWeek = CalendarDiffDays 0 7
+
+calendarMonth :: CalendarDiffDays
+calendarMonth = CalendarDiffDays 1 0
+
+calendarYear :: CalendarDiffDays
+calendarYear = CalendarDiffDays 12 0
+
+-- | Scale by a factor. Note that @scaleCalendarDiffDays (-1)@ will not perfectly invert a duration, due to variable month lengths.
+scaleCalendarDiffDays :: Integer -> CalendarDiffDays -> CalendarDiffDays
+scaleCalendarDiffDays k (CalendarDiffDays m d) = CalendarDiffDays (k * m) (k * d)
diff --git a/lib/Data/Time/Calendar/Duration.hs b/lib/Data/Time/Calendar/Duration.hs
deleted file mode 100644 (file)
index 731f641..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-module Data.Time.Calendar.Duration
-    (
-        -- * Calendar Duration
-        module Data.Time.Calendar.Duration
-    ) where
-
-#if MIN_VERSION_base(4,8,0)
-#else
-import Data.Monoid
-#endif
-
-#if MIN_VERSION_base(4,9,0)
-import Data.Semigroup
-#endif
-
-data CalendarDuration = CalendarDuration
-    { calendarMonths :: Integer
-    , calendarDays :: Integer
-    } deriving Eq
-
-#if MIN_VERSION_base(4,9,0)
--- | Additive
-instance Semigroup CalendarDuration where
-    CalendarDuration m1 d1 <> CalendarDuration m2 d2 = CalendarDuration (m1 + m2) (d1 + d2)
-#endif
-
--- | Additive
-instance Monoid CalendarDuration where
-    mempty = CalendarDuration 0 0
-#if MIN_VERSION_base(4,9,0)
-    mappend = (<>)
-#else
-    mappend (CalendarDuration m1 d1) (CalendarDuration m2 d2) = CalendarDuration (m1 + m2) (d1 + d2)
-#endif
-
--- | Show in ISO 8601 "PyyYmmMddD" format.
-instance Show CalendarDuration where
-    show dur@(CalendarDuration m d) = let
-        (y,my) = quotRem m 12
-        ys = if y == 0 then "" else show y ++ "Y"
-        ms = if my == 0 then "" else show my ++ "M"
-        ds = if d == 0 then "" else show d ++ "D"
-        in if dur == mempty then "P0D" else "P" ++ ys ++ ms ++ ds
-
-calendarDay :: CalendarDuration
-calendarDay = CalendarDuration 0 1
-
-calendarWeek :: CalendarDuration
-calendarWeek = CalendarDuration 0 7
-
-calendarMonth :: CalendarDuration
-calendarMonth = CalendarDuration 1 0
-
-calendarYear :: CalendarDuration
-calendarYear = CalendarDuration 12 0
-
--- | Scale by a factor. Note that @scaleCalendarDuration (-1)@ will not perfectly invert a duration, due to variable month lengths.
-scaleCalendarDuration :: Integer -> CalendarDuration -> CalendarDuration
-scaleCalendarDuration k (CalendarDuration m d) = CalendarDuration (k * m) (k * d)
index df173d3..bea0435 100644 (file)
@@ -20,7 +20,7 @@ module Data.Time.Calendar.Gregorian
 import Data.Time.Calendar.MonthDay
 import Data.Time.Calendar.OrdinalDate
 import Data.Time.Calendar.Days
-import Data.Time.Calendar.Duration
+import Data.Time.Calendar.CalendarDiffDays
 import Data.Time.Calendar.Private
 
 -- | Convert to proleptic Gregorian calendar. First element of result is year, second month number (1-12), third day (1-31).
@@ -81,15 +81,15 @@ addGregorianYearsRollOver :: Integer -> Day -> Day
 addGregorianYearsRollOver n = addGregorianMonthsRollOver (n * 12)
 
 -- | Add months (clipped to last day), then add days
-addGregorianDurationClip :: CalendarDuration -> Day -> Day
-addGregorianDurationClip (CalendarDuration m d) day = addDays d $ addGregorianMonthsClip m day
+addGregorianDurationClip :: CalendarDiffDays -> Day -> Day
+addGregorianDurationClip (CalendarDiffDays m d) day = addDays d $ addGregorianMonthsClip m day
 
 -- | Add months (rolling over to next month), then add days
-addGregorianDurationRollOver :: CalendarDuration -> Day -> Day
-addGregorianDurationRollOver (CalendarDuration m d) day = addDays d $ addGregorianMonthsRollOver m day
+addGregorianDurationRollOver :: CalendarDiffDays -> Day -> Day
+addGregorianDurationRollOver (CalendarDiffDays m d) day = addDays d $ addGregorianMonthsRollOver m day
 
 -- | Calendrical difference, with as many whole months as possible
-diffGregorianDurationClip :: Day -> Day -> CalendarDuration
+diffGregorianDurationClip :: Day -> Day -> CalendarDiffDays
 diffGregorianDurationClip day2 day1 = let
     (y1,m1,d1) = toGregorian day1
     (y2,m2,d2) = toGregorian day2
@@ -100,12 +100,12 @@ diffGregorianDurationClip day2 day1 = let
         if day2 >= day1 then
         if d2 >= d1 then ymdiff else ymdiff - 1
         else if d2 <= d1 then ymdiff else ymdiff + 1
-    dayAllowed = addGregorianDurationClip (CalendarDuration ymAllowed 0) day1
-    in CalendarDuration ymAllowed $ diffDays day2 dayAllowed
+    dayAllowed = addGregorianDurationClip (CalendarDiffDays ymAllowed 0) day1
+    in CalendarDiffDays ymAllowed $ diffDays day2 dayAllowed
 
 -- | Calendrical difference, with as many whole months as possible.
 -- Same as 'diffGregorianDurationClip' for positive durations.
-diffGregorianDurationRollOver :: Day -> Day -> CalendarDuration
+diffGregorianDurationRollOver :: Day -> Day -> CalendarDiffDays
 diffGregorianDurationRollOver day2 day1 = let
     (y1,m1,d1) = toGregorian day1
     (y2,m2,d2) = toGregorian day2
@@ -116,8 +116,8 @@ diffGregorianDurationRollOver day2 day1 = let
         if day2 >= day1 then
         if d2 >= d1 then ymdiff else ymdiff - 1
         else if d2 <= d1 then ymdiff else ymdiff + 1
-    dayAllowed = addGregorianDurationRollOver (CalendarDuration ymAllowed 0) day1
-    in CalendarDuration ymAllowed $ diffDays day2 dayAllowed
+    dayAllowed = addGregorianDurationRollOver (CalendarDiffDays ymAllowed 0) day1
+    in CalendarDiffDays ymAllowed $ diffDays day2 dayAllowed
 
 -- orphan instance
 instance Show Day where
index bf8daeb..6fd343b 100644 (file)
@@ -15,7 +15,7 @@ module Data.Time.Calendar.Julian
 import Data.Time.Calendar.MonthDay
 import Data.Time.Calendar.JulianYearDay
 import Data.Time.Calendar.Days
-import Data.Time.Calendar.Duration
+import Data.Time.Calendar.CalendarDiffDays
 import Data.Time.Calendar.Private
 
 -- | Convert to proleptic Julian calendar. First element of result is year, second month number (1-12), third day (1-31).
@@ -76,15 +76,15 @@ addJulianYearsRollOver :: Integer -> Day -> Day
 addJulianYearsRollOver n = addJulianMonthsRollOver (n * 12)
 
 -- | Add months (clipped to last day), then add days
-addJulianDurationClip :: CalendarDuration -> Day -> Day
-addJulianDurationClip (CalendarDuration m d) day = addDays d $ addJulianMonthsClip m day
+addJulianDurationClip :: CalendarDiffDays -> Day -> Day
+addJulianDurationClip (CalendarDiffDays m d) day = addDays d $ addJulianMonthsClip m day
 
 -- | Add months (rolling over to next month), then add days
-addJulianDurationRollOver :: CalendarDuration -> Day -> Day
-addJulianDurationRollOver (CalendarDuration m d) day = addDays d $ addJulianMonthsRollOver m day
+addJulianDurationRollOver :: CalendarDiffDays -> Day -> Day
+addJulianDurationRollOver (CalendarDiffDays m d) day = addDays d $ addJulianMonthsRollOver m day
 
 -- | Calendrical difference, with as many whole months as possible
-diffJulianDurationClip :: Day -> Day -> CalendarDuration
+diffJulianDurationClip :: Day -> Day -> CalendarDiffDays
 diffJulianDurationClip day2 day1 = let
     (y1,m1,d1) = toJulian day1
     (y2,m2,d2) = toJulian day2
@@ -95,12 +95,12 @@ diffJulianDurationClip day2 day1 = let
         if day2 >= day1 then
         if d2 >= d1 then ymdiff else ymdiff - 1
         else if d2 <= d1 then ymdiff else ymdiff + 1
-    dayAllowed = addJulianDurationClip (CalendarDuration ymAllowed 0) day1
-    in CalendarDuration ymAllowed $ diffDays day2 dayAllowed
+    dayAllowed = addJulianDurationClip (CalendarDiffDays ymAllowed 0) day1
+    in CalendarDiffDays ymAllowed $ diffDays day2 dayAllowed
 
 -- | Calendrical difference, with as many whole months as possible.
 -- Same as 'diffJulianDurationClip' for positive durations.
-diffJulianDurationRollOver :: Day -> Day -> CalendarDuration
+diffJulianDurationRollOver :: Day -> Day -> CalendarDiffDays
 diffJulianDurationRollOver day2 day1 = let
     (y1,m1,d1) = toJulian day1
     (y2,m2,d2) = toJulian day2
@@ -111,5 +111,5 @@ diffJulianDurationRollOver day2 day1 = let
         if day2 >= day1 then
         if d2 >= d1 then ymdiff else ymdiff - 1
         else if d2 <= d1 then ymdiff else ymdiff + 1
-    dayAllowed = addJulianDurationRollOver (CalendarDuration ymAllowed 0) day1
-    in CalendarDuration ymAllowed $ diffDays day2 dayAllowed
+    dayAllowed = addJulianDurationRollOver (CalendarDiffDays ymAllowed 0) day1
+    in CalendarDiffDays ymAllowed $ diffDays day2 dayAllowed
index d5729d7..8b8938d 100644 (file)
@@ -27,7 +27,7 @@ testClip :: (Integer, Int, Int) -> (Integer, Int, Int) -> (Integer, Integer) ->
 testClip (y1,m1,d1) (y2,m2,d2) (em, ed) = let
     day1 = fromGregorian y1 m1 d1
     day2 = fromGregorian y2 m2 d2
-    expected = CalendarDuration em ed
+    expected = CalendarDiffDays em ed
     found = diffGregorianDurationClip day1 day2
     in testCase (show day1 ++ " - " ++ show day2) $ assertEqual "" expected found
 
@@ -43,4 +43,4 @@ testDiffs =
         ]
 
 testDuration :: TestTree
-testDuration = testGroup "CalendarDuration" [testAddDiff, testDiffs]
+testDuration = testGroup "CalendarDiffDays" [testAddDiff, testDiffs]
index bb77c9a..a1e68dc 100644 (file)
@@ -74,7 +74,7 @@ library
         Data.Time.Calendar.Private,
         Data.Time.Calendar.Days,
         Data.Time.Calendar.Gregorian,
-        Data.Time.Calendar.Duration,
+        Data.Time.Calendar.CalendarDiffDays,
         Data.Time.Calendar.Week,
         Data.Time.Calendar.JulianYearDay,
         Data.Time.Clock.Internal.DiffTime,