[commit: packages/time] format-widths, improve-leapseconds, master, posix-perf, tasty, wip/travis: Remove an extra division (52523fb)

git at git.haskell.org git at git.haskell.org
Mon Feb 20 21:16:47 UTC 2017


Repository : ssh://git@git.haskell.org/time

On branches: format-widths,improve-leapseconds,master,posix-perf,tasty,wip/travis
Link       : http://git.haskell.org/packages/time.git/commitdiff/52523fbc2deebeb7137b76d66e68eea1c8c030c0

>---------------------------------------------------------------

commit 52523fbc2deebeb7137b76d66e68eea1c8c030c0
Author: treeowl <David.Feuer at gmail.com>
Date:   Fri Nov 7 00:14:37 2014 -0500

    Remove an extra division
    
    Currently, GHC does not merge `div` with `mod` by itself; `divMod` saves time.
    
    Turn nested `if`s into `case`.


>---------------------------------------------------------------

52523fbc2deebeb7137b76d66e68eea1c8c030c0
 lib/Data/Time/Calendar/WeekDate.hs | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/lib/Data/Time/Calendar/WeekDate.hs b/lib/Data/Time/Calendar/WeekDate.hs
index 1c76977..c7046b4 100644
--- a/lib/Data/Time/Calendar/WeekDate.hs
+++ b/lib/Data/Time/Calendar/WeekDate.hs
@@ -9,20 +9,19 @@ import Data.Time.Calendar.Private
 -- Note that \"Week\" years are not quite the same as Gregorian years, as the first day of the year is always a Monday.
 -- The first week of a year is the first week to contain at least four days in the corresponding Gregorian year.
 toWeekDate :: Day -> (Integer,Int,Int)
-toWeekDate date@(ModifiedJulianDay mjd) = (y1,fromInteger (w1 + 1),fromInteger (mod d 7) + 1) where
+toWeekDate date@(ModifiedJulianDay mjd) = (y1,fromInteger (w1 + 1),fromInteger d_mod_7 + 1) where
+        (d_div_7, d_mod_7) = d `divMod` 7
 	(y0,yd) = toOrdinalDate date
 	d = mjd + 2
 	foo :: Integer -> Integer
 	foo y = bar (toModifiedJulianDay (fromOrdinalDate y 6))
-	bar k = (div d 7) - (div k 7)
-	w0 = bar (d - (toInteger yd) + 4)
-	(y1,w1) = if w0 == -1
-		then (y0 - 1,foo (y0 - 1))
-		else if w0 == 52
-		then if (foo (y0 + 1)) == 0
-			then (y0 + 1,0)
-			else (y0,w0)
-		else (y0,w0)
+	bar k = d_div_7 - k `div` 7
+	(y1,w1) = case bar (d - toInteger yd + 4) of
+	            -1 -> (y0 - 1, foo (y0 - 1))
+	            52 -> if foo (y0 + 1) == 0
+	                  then (y0 + 1, 0)
+	                  else (y0, 52)
+	            w0  -> (y0, w0)
 	
 -- | convert from ISO 8601 Week Date format. First argument is year, second week number (1-52 or 53), third day of week (1 for Monday to 7 for Sunday).
 -- Invalid week and day values will be clipped to the correct range.



More information about the ghc-commits mailing list