packages feed

ribosome-0.2.0.0: lib/Ribosome/Data/Time.hs

module Ribosome.Data.Time(
  epochSeconds,
  usleep,
  sleep,
  sleepW,
) where

import Control.Concurrent (threadDelay)
import Control.Monad.IO.Class (MonadIO, liftIO)
import Data.Time.Clock.POSIX (getPOSIXTime)
import GHC.Float (word2Double)

epochSeconds :: MonadIO m => m Int
epochSeconds = liftIO $ fmap 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