ribosome-0.4.0.0: lib/Ribosome/System/Time.hs
module Ribosome.System.Time where
import Control.Concurrent (threadDelay)
import Data.Hourglass (Elapsed(Elapsed), ElapsedP(ElapsedP), NanoSeconds(NanoSeconds), Seconds(Seconds))
import Data.Time.Clock.POSIX (getPOSIXTime)
import GHC.Float (word2Double)
epochSeconds :: MonadIO m => m Int
epochSeconds = liftIO $ round <$> getPOSIXTime
usleep :: MonadIO m => Double -> m ()
usleep =
liftIO . threadDelay . round
sleep :: MonadIO m => Double -> m ()
sleep seconds =
usleep $ seconds * 1e6
sleepW :: MonadIO m => Word -> m ()
sleepW = sleep . word2Double
secondsP :: Double -> ElapsedP
secondsP s =
ElapsedP (Elapsed (Seconds $ floor s)) (NanoSeconds nano)
where
nano =
round (s * 1000000000) `mod` 1000000000