monad-extras-0.3.2.0: Control/Concurrent/Delay.hs
-- | Delay the current thread with an unbound number of milliseconds.
module Control.Concurrent.Delay
(delayMicrosecs
,delayMillisecs
,delaySeconds
,delayMinutes
,delayHours
,delayDays
) where
import Control.Concurrent
-- | Suspends the current thread for a given number of microseconds.
--
-- There is no guarantee that the thread will be rescheduled promptly
-- when the delay has expired, but the thread will never continue to
-- run earlier than specified.
delayMicrosecs :: Integer -> IO ()
delayMicrosecs microsecs
| microsecs <= fromIntegral maxMicrosecs = threadDelay (fromIntegral microsecs)
| otherwise = do
threadDelay maxMicrosecs
delayMicrosecs (microsecs - fromIntegral maxMicrosecs)
where maxMicrosecs = maxBound :: Int
-- | Delay the current thread for at least n milliseconds.
delayMillisecs :: Integer -> IO ()
delayMillisecs = delayMicrosecs . (*1000)
-- | Delay the current thread for at least n seconds.
delaySeconds :: Integer -> IO ()
delaySeconds = delayMillisecs . (* 1000)
-- | Delay the current thread for at least n minutes.
delayMinutes :: Integer -> IO ()
delayMinutes = delaySeconds . (*60)
-- | Delay the current thread for at least n hours.
delayHours :: Integer -> IO ()
delayHours = delayMinutes . (*60)
-- | Delay the current thread for at least n days.
delayDays :: Integer -> IO ()
delayDays = delayHours . (*24)