module Data.Time.Hora.Span
    (-- ** 'TimeSpan'
    toPico,
    toMilli,
    toSec,
    -- ** multipliers
    picoSec,
    picoMs,
    msSec,
    -- ** 'Pico' - 'TimeSpan' conversion
    picoTimeSpan,
    timeSpanPico,
    -- ** diff time
    toDiffTime,
    nominalDiff
    ) where

import Data.Fixed
import Data.Ratio
import Data.Time.Clock
import Data.Time.Hora.Type
import Data.Time.Hora.Internal.Span


toDiffTime::Integral a => TimeSpan a -> DiffTime
toDiffTime (Sec s0) = secondsToDiffTime $ fromIntegral s0
toDiffTime (Pico s0) = picosecondsToDiffTime $ fromIntegral s0
toDiffTime t0@(Milli s0) = picosecondsToDiffTime $ toPico t0


nominalDiff::Integral a => TimeSpan a -> NominalDiffTime
nominalDiff ts0 = let s1 = toPico ts0::Integer
                in fromRational $ s1 % picoSec


picoTimeSpan::Integral a => Pico -> TimeSpan a
picoTimeSpan (MkFixed p0) = Pico $ fromIntegral p0


timeSpanPico::Integral a => TimeSpan a -> Pico
timeSpanPico ts0 = MkFixed $ fromIntegral p0
        where p0 = toPico ts0