packages feed

opentracing-0.1.0.0: OpenTracing/Time.hs

module OpenTracing.Time (AsMicros(micros)) where

import Data.Int
import Data.Time.Clock
import Data.Time.Clock.POSIX
import Data.Word


class AsMicros a where
    micros :: Integral b => a -> b

instance AsMicros UTCTime where
    micros = round . (1000000*) . utcTimeToPOSIXSeconds
    {-# INLINE micros #-}

instance AsMicros NominalDiffTime where
    micros = round . (1000000*)
    {-# INLINE micros #-}

{-# SPECIALIZE micros :: UTCTime         -> Int64  #-}
{-# SPECIALIZE micros :: UTCTime         -> Word64 #-}
{-# SPECIALIZE micros :: NominalDiffTime -> Int64  #-}
{-# SPECIALIZE micros :: NominalDiffTime -> Word64 #-}