hora-2.2.1: src/Data/Time/Hora/Span.hs
{- | Conversion between 'TimeSpan', 'DiffTime', 'NominalDiffTime', 'F.pico' -}
module Data.Time.Hora.Span
(-- ** 'TimeSpan'
toPico,
toMilli,
toSec,
-- ** multipliers
picoSec,
picoMs,
msSec,
-- ** 'F.Pico' - 'TimeSpan' conversion
picoTimeSpan,
timeSpanPico,
-- ** diff time
toDiffTime,
nominalDiff
) where
import Data.Fixed as F
import Data.Ratio
import Data.Time.Clock
import Data.Time.Hora.Type
import Data.Time.Hora.Internal.Span as S
import Data.Time.Hora.Internal.FromIntegral (fi)
-- | convert 'TimeSpan' to 'DiffTime'
toDiffTime :: Integral a => TimeSpan a -> DiffTime
toDiffTime (Sec s0) = secondsToDiffTime $ fi s0
toDiffTime (S.Pico s0) = picosecondsToDiffTime $ fi s0
toDiffTime t0@(Milli s0) = picosecondsToDiffTime $ toPico t0
-- | convert 'TimeSpan' to 'NominalDiffTime'
nominalDiff :: Integral a => TimeSpan a -> NominalDiffTime
nominalDiff ts0 = let s1 = toPico ts0::Integer
in fromRational $ s1 % picoSec
-- | convert 'F.Pico' to 'TimeSpan'
picoTimeSpan :: Integral a => F.Pico -> TimeSpan a
picoTimeSpan (MkFixed p0) = S.Pico $ fi p0
-- | convert 'TimeSpan' to 'F.Pico'
timeSpanPico :: Integral a => TimeSpan a -> F.Pico
timeSpanPico ts0 = MkFixed $ fi p0
where p0 = toPico ts0