validity-time-0.1.0.0: src/Data/Validity/Time/Clock.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE RecordWildCards #-}
module Data.Validity.Time.Clock where
import Data.Validity
import Data.Time.Clock
import Data.Validity.Time.Calendar ()
-- | Valid according to the 'Rational' it contains.
instance Validity UniversalTime where
isValid (ModJulianDate i) = isValid i
validate = validateByCheckingName "UniversalTime"
-- | Trivially valid
instance Validity DiffTime where
isValid = triviallyValid
validate = validateByCheckingName "DiffTime"
instance Validity UTCTime where
isValid UTCTime {..} =
and
[ isValid utctDay
, isValid utctDayTime
, utctDayTime >= 0
, utctDayTime < 86401
]
validate UTCTime {..} =
mconcat
[ utctDay <?!> "utctDay"
, utctDayTime <?!> "utctDayTime"
, utctDayTime >= 0 <?@> "The day time is positive."
, utctDayTime < 86401 <?@> "The day time is strictly less than 86401."
]
instance Validity NominalDiffTime
-- NominalDiffTime contains a 'Pico' but that constructorr is not exported so we can't do any better than this.
where
isValid = isValid . (round :: NominalDiffTime -> Integer)
validate = validateByCheckingName "NominalDiffTime"