module Data.Thyme.Calendar.WeekDate
( Year, WeekOfYear, DayOfWeek
, WeekDate (..), weekDate, weekDateValid, showWeekDate
, SundayWeek (..), sundayWeek, sundayWeekValid
, MondayWeek (..), mondayWeek, mondayWeekValid
, module Data.Thyme.Calendar.WeekDate
) where
import Prelude
import Control.Applicative
import Control.Lens
import Data.Thyme.Calendar.OrdinalDate
import Data.Thyme.Calendar.Internal
import Data.Thyme.TH
import System.Random
import Test.QuickCheck
instance Bounded WeekDate where
minBound = minBound ^. weekDate
maxBound = maxBound ^. weekDate
instance Bounded SundayWeek where
minBound = minBound ^. sundayWeek
maxBound = maxBound ^. sundayWeek
instance Bounded MondayWeek where
minBound = minBound ^. mondayWeek
maxBound = maxBound ^. mondayWeek
instance Random WeekDate where
randomR = randomIsoR weekDate
random = over _1 (^. weekDate) . random
instance Random SundayWeek where
randomR = randomIsoR sundayWeek
random = over _1 (^. sundayWeek) . random
instance Random MondayWeek where
randomR = randomIsoR mondayWeek
random = over _1 (^. mondayWeek) . random
instance Arbitrary WeekDate where
arbitrary = view weekDate <$> arbitrary
instance Arbitrary SundayWeek where
arbitrary = view sundayWeek <$> arbitrary
instance Arbitrary MondayWeek where
arbitrary = view mondayWeek <$> arbitrary
thymeLenses ''WeekDate
thymeLenses ''SundayWeek
thymeLenses ''MondayWeek