amqp-worker-0.3.2: src/Network/AMQP/Worker/Poll.hs
{-# LANGUAGE FlexibleContexts #-}
module Network.AMQP.Worker.Poll where
import Control.Concurrent (threadDelay)
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Loops (untilJust)
-- | Keep trying action every N microseconds until it returns Just a
poll :: (MonadIO m) => Int -> m (Maybe a) -> m a
poll us action = untilJust $ do
ma <- action
case ma of
Just a -> return $ Just a
Nothing -> do
liftIO $ threadDelay us
return Nothing