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

module Polysemy.Time.Orphans where

import Data.Time (secondsToNominalDiffTime, nominalDiffTimeToSeconds, diffUTCTime, addUTCTime, NominalDiffTime, UTCTime)
import Torsor (Additive(..), Torsor(..))

instance Additive NominalDiffTime where
  zero :: NominalDiffTime
zero =
    0
  invert :: NominalDiffTime -> NominalDiffTime
invert =
    Pico -> NominalDiffTime
secondsToNominalDiffTime (Pico -> NominalDiffTime)
-> (NominalDiffTime -> Pico) -> NominalDiffTime -> NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pico -> Pico
forall a. Num a => a -> a
negate (Pico -> Pico)
-> (NominalDiffTime -> Pico) -> NominalDiffTime -> Pico
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NominalDiffTime -> Pico
nominalDiffTimeToSeconds
  plus :: NominalDiffTime -> NominalDiffTime -> NominalDiffTime
plus =
    NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall a. Num a => a -> a -> a
(+)
  minus :: NominalDiffTime -> NominalDiffTime -> NominalDiffTime
minus =
    (-)

instance Torsor UTCTime NominalDiffTime where
  add :: NominalDiffTime -> UTCTime -> UTCTime
add v :: NominalDiffTime
v p :: UTCTime
p =
    NominalDiffTime -> UTCTime -> UTCTime
addUTCTime NominalDiffTime
v UTCTime
p
  difference :: UTCTime -> UTCTime -> NominalDiffTime
difference =
    UTCTime -> UTCTime -> NominalDiffTime
diffUTCTime