{-# OPTIONS_GHC -Wno-orphans #-}

module IsomorphismClass.Relations.DiffTimeAndNominalDiffTime where

import Data.Time
import IsomorphismClass.Classes
import IsomorphismClass.Prelude

instance IsomorphicTo DiffTime NominalDiffTime where
  to :: NominalDiffTime -> DiffTime
to = Integer -> DiffTime
picosecondsToDiffTime (Integer -> DiffTime)
-> (NominalDiffTime -> Integer) -> NominalDiffTime -> DiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Pico -> Integer
picoToInteger (Pico -> Integer)
-> (NominalDiffTime -> Pico) -> NominalDiffTime -> Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. NominalDiffTime -> Pico
nominalDiffTimeToSeconds
    where
      picoToInteger :: Pico -> Integer
      picoToInteger :: Pico -> Integer
picoToInteger (MkFixed Integer
p) = Integer
p

instance IsomorphicTo NominalDiffTime DiffTime where
  to :: DiffTime -> NominalDiffTime
to = Pico -> NominalDiffTime
secondsToNominalDiffTime (Pico -> NominalDiffTime)
-> (DiffTime -> Pico) -> DiffTime -> NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Integer -> Pico
forall k (a :: k). Integer -> Fixed a
MkFixed (Integer -> Pico) -> (DiffTime -> Integer) -> DiffTime -> Pico
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. DiffTime -> Integer
diffTimeToPicoseconds