packages feed

validity-time-0.5.0.0: src/Data/Validity/Time/Clock.hs

{-# LANGUAGE RecordWildCards #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Data.Validity.Time.Clock where

import Data.Time.Clock
import Data.Validity
import Data.Validity.Time.Calendar ()

-- | Valid according to the 'Rational' it contains.
instance Validity UniversalTime where
  validate = delve "toModifiedJulianDay" . getModJulianDate

-- | Trivially valid
instance Validity DiffTime where
  validate = trivialValidation

instance Validity UTCTime where
  validate UTCTime {..} =
    mconcat
      [ annotate utctDay "utctDay",
        annotate utctDayTime "utctDayTime",
        check (utctDayTime >= 0) "The day time is positive.",
        check (utctDayTime < 86401) "The day time is strictly less than 86401."
      ]

instance Validity NominalDiffTime where
  validate = trivialValidation