module Data.Thyme.Clock.POSIX ( posixDayLength , module Data.Thyme.Clock.POSIX ) where import Prelude import Control.Lens import Data.AdditiveGroup import Data.Micro import Data.Thyme.Clock.Internal import qualified Data.Time.Clock.POSIX as T import Data.VectorSpace type POSIXTime = NominalDiffTime {-# INLINE posixTime #-} posixTime :: Iso' UTCTime POSIXTime posixTime = iso (\ (UTCRep t) -> t ^-^ unixEpoch) (UTCRep . (^+^) unixEpoch) where unixEpoch = {-ModifiedJulianDay-}40587 *^ posixDayLength -- TODO: reimplement without 'T.getPOSIXTime' to avoid 'Integer'? {-# INLINE getPOSIXTime #-} getPOSIXTime :: IO POSIXTime getPOSIXTime = fmap (NominalDiffTime . toMicro . toRational) T.getPOSIXTime