module Time.TimeStamp
( TimeStamp (..)
, timeDiff
, timeAdd
, timeMul
, timeDiv
) where
import Time.Rational (KnownRat, Rat, RatioNat)
import Time.Units (Time (..))
newtype TimeStamp = TimeStamp Rational
deriving (Show, Read, Num, Eq, Ord, Enum, Fractional, Real, RealFrac)
timeDiff :: forall (unit :: Rat) . KnownRat unit
=> TimeStamp
-> TimeStamp
-> (Ordering, Time unit)
timeDiff (TimeStamp a) (TimeStamp b) =
let order = compare a b
d = fromRational $ case order of
EQ -> 0
GT -> a b
LT -> b a
in (order, d)
timeAdd :: forall (unit :: Rat) . KnownRat unit
=> Time unit
-> Time unit
-> Time unit
timeAdd = (+)
timeMul :: forall (unit :: Rat) . KnownRat unit
=> RatioNat
-> Time unit
-> Time unit
timeMul n (Time t) = Time (n * t)
timeDiv :: forall (unit :: Rat) . KnownRat unit
=> Time unit
-> Time unit
-> RatioNat
timeDiv (Time t1) (Time t2) = t1 / t2