{-# language CPP #-}

module Clocked.Common where


#ifdef darwin_HOST_OS


import Control.Applicative ((<$>))

import Data.Time.Clock.POSIX

getTimeDouble = realToFrac <$> getPOSIXTime


#else


import Control.Applicative ((<$>))

import System.Posix.Clock

-- | returns a monotonic time in seconds
getTimeDouble :: IO Double
getTimeDouble =
    toSeconds <$> getTime Monotonic
  where
    toSeconds (TimeSpec seconds nanoSeconds) =
        fromIntegral seconds + fromIntegral nanoSeconds * 10 ** (- 9)


#endif
