thyme-0.1.2.0: src/Data/Thyme/Clock/Scale.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
-- #hide
module Data.Thyme.Clock.Scale where
import Prelude
import Control.DeepSeq
import Data.AdditiveGroup
import Data.Basis
import Data.Data
import Data.Int
import Data.Ix
import Data.Micro
import Data.VectorSpace
-- TODO: UniversalTime
newtype DiffTime = DiffTime Micro
deriving (Eq, Ord, Enum, Ix, Bounded, NFData, Data, Typeable, AdditiveGroup)
#if SHOW_INTERNAL
deriving instance Show DiffTime
#else
instance Show DiffTime where
showsPrec p (DiffTime a) rest = showsPrec p a ('s' : rest)
#endif
instance VectorSpace DiffTime where
type Scalar DiffTime = Rational
{-# INLINE (*^) #-}
s *^ DiffTime t = DiffTime (s *^ t)
instance HasBasis DiffTime where
type Basis DiffTime = ()
{-# INLINE basisValue #-}
basisValue () = DiffTime (basisValue ())
{-# INLINE decompose #-}
decompose (DiffTime a) = decompose a
{-# INLINE decompose' #-}
decompose' (DiffTime a) = decompose' a
#if INSTANCE_NUM
deriving instance Num DiffTime
deriving instance Real DiffTime
deriving instance Fractional DiffTime
deriving instance RealFrac DiffTime
#endif
{-# INLINE microsecondsToDiffTime #-}
microsecondsToDiffTime :: Int64 -> DiffTime
microsecondsToDiffTime = DiffTime . Micro