module Data.Time.Calendar.Week ( -- * Week DayOfWeek(..) , dayOfWeek ) where import Data.Time.Calendar.Days data DayOfWeek = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday deriving (DayOfWeek -> DayOfWeek -> Bool (DayOfWeek -> DayOfWeek -> Bool) -> (DayOfWeek -> DayOfWeek -> Bool) -> Eq DayOfWeek forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: DayOfWeek -> DayOfWeek -> Bool $c/= :: DayOfWeek -> DayOfWeek -> Bool == :: DayOfWeek -> DayOfWeek -> Bool $c== :: DayOfWeek -> DayOfWeek -> Bool Eq, Int -> DayOfWeek -> ShowS [DayOfWeek] -> ShowS DayOfWeek -> String (Int -> DayOfWeek -> ShowS) -> (DayOfWeek -> String) -> ([DayOfWeek] -> ShowS) -> Show DayOfWeek forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [DayOfWeek] -> ShowS $cshowList :: [DayOfWeek] -> ShowS show :: DayOfWeek -> String $cshow :: DayOfWeek -> String showsPrec :: Int -> DayOfWeek -> ShowS $cshowsPrec :: Int -> DayOfWeek -> ShowS Show, ReadPrec [DayOfWeek] ReadPrec DayOfWeek Int -> ReadS DayOfWeek ReadS [DayOfWeek] (Int -> ReadS DayOfWeek) -> ReadS [DayOfWeek] -> ReadPrec DayOfWeek -> ReadPrec [DayOfWeek] -> Read DayOfWeek forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [DayOfWeek] $creadListPrec :: ReadPrec [DayOfWeek] readPrec :: ReadPrec DayOfWeek $creadPrec :: ReadPrec DayOfWeek readList :: ReadS [DayOfWeek] $creadList :: ReadS [DayOfWeek] readsPrec :: Int -> ReadS DayOfWeek $creadsPrec :: Int -> ReadS DayOfWeek Read) -- | \"Circular\", so for example @[Tuesday ..]@ gives an endless sequence. -- Also: 'fromEnum' gives [1 .. 7] for [Monday .. Sunday], and 'toEnum' performs mod 7 to give a cycle of days. instance Enum DayOfWeek where toEnum :: Int -> DayOfWeek toEnum Int i = case Int -> Int -> Int forall a. Integral a => a -> a -> a mod Int i Int 7 of Int 0 -> DayOfWeek Sunday Int 1 -> DayOfWeek Monday Int 2 -> DayOfWeek Tuesday Int 3 -> DayOfWeek Wednesday Int 4 -> DayOfWeek Thursday Int 5 -> DayOfWeek Friday Int _ -> DayOfWeek Saturday fromEnum :: DayOfWeek -> Int fromEnum DayOfWeek Monday = Int 1 fromEnum DayOfWeek Tuesday = Int 2 fromEnum DayOfWeek Wednesday = Int 3 fromEnum DayOfWeek Thursday = Int 4 fromEnum DayOfWeek Friday = Int 5 fromEnum DayOfWeek Saturday = Int 6 fromEnum DayOfWeek Sunday = Int 7 enumFromTo :: DayOfWeek -> DayOfWeek -> [DayOfWeek] enumFromTo DayOfWeek wd1 DayOfWeek wd2 | DayOfWeek wd1 DayOfWeek -> DayOfWeek -> Bool forall a. Eq a => a -> a -> Bool == DayOfWeek wd2 = [DayOfWeek wd1] enumFromTo DayOfWeek wd1 DayOfWeek wd2 = DayOfWeek wd1 DayOfWeek -> [DayOfWeek] -> [DayOfWeek] forall a. a -> [a] -> [a] : DayOfWeek -> DayOfWeek -> [DayOfWeek] forall a. Enum a => a -> a -> [a] enumFromTo (DayOfWeek -> DayOfWeek forall a. Enum a => a -> a succ DayOfWeek wd1) DayOfWeek wd2 enumFromThenTo :: DayOfWeek -> DayOfWeek -> DayOfWeek -> [DayOfWeek] enumFromThenTo DayOfWeek wd1 DayOfWeek wd2 DayOfWeek wd3 | DayOfWeek wd2 DayOfWeek -> DayOfWeek -> Bool forall a. Eq a => a -> a -> Bool == DayOfWeek wd3 = [DayOfWeek wd1, DayOfWeek wd2] enumFromThenTo DayOfWeek wd1 DayOfWeek wd2 DayOfWeek wd3 = DayOfWeek wd1 DayOfWeek -> [DayOfWeek] -> [DayOfWeek] forall a. a -> [a] -> [a] : DayOfWeek -> DayOfWeek -> DayOfWeek -> [DayOfWeek] forall a. Enum a => a -> a -> a -> [a] enumFromThenTo DayOfWeek wd2 (Int -> DayOfWeek forall a. Enum a => Int -> a toEnum (Int -> DayOfWeek) -> Int -> DayOfWeek forall a b. (a -> b) -> a -> b $ (Int 2 Int -> Int -> Int forall a. Num a => a -> a -> a * DayOfWeek -> Int forall a. Enum a => a -> Int fromEnum DayOfWeek wd2) Int -> Int -> Int forall a. Num a => a -> a -> a - (DayOfWeek -> Int forall a. Enum a => a -> Int fromEnum DayOfWeek wd1)) DayOfWeek wd3 dayOfWeek :: Day -> DayOfWeek dayOfWeek :: Day -> DayOfWeek dayOfWeek (ModifiedJulianDay Integer d) = Int -> DayOfWeek forall a. Enum a => Int -> a toEnum (Int -> DayOfWeek) -> Int -> DayOfWeek forall a b. (a -> b) -> a -> b $ Integer -> Int forall a. Num a => Integer -> a fromInteger (Integer -> Int) -> Integer -> Int forall a b. (a -> b) -> a -> b $ Integer d Integer -> Integer -> Integer forall a. Num a => a -> a -> a + Integer 3