-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | A Haskell library to provide companion threads.
--   
--   Please see the README on GitHub at
--   https://github.com/commercialhaskell/companion#readme
@package companion
@version 0.1.0

-- | Companion threads, such as for printing messages saying we're still
--   busy.
module Control.Concurrent.Companion

-- | Keep running the Companion action until either the inner action
--   completes or calls the StopCompanion action. This can be used
--   to give the user status information while running a long running
--   operations.
withCompanion :: MonadUnliftIO m => Companion m -> (StopCompanion m -> m a) -> m a

-- | When a delay was interrupted because we're told to stop, perform this
--   action.
onCompanionDone :: MonadUnliftIO m => m () -> m () -> m ()

-- | A companion thread which can perform arbitrary actions as well as
--   delay.
type Companion (m :: Type -> Type) = Delay -> m ()

-- | Delay the given number of microseconds. If StopCompanion is
--   triggered before the timer completes, a CompanionDone exception
--   will be thrown (which is caught internally by withCompanion).
type Delay = forall (mio :: Type -> Type). MonadIO mio => Int -> mio ()

-- | Tell the Companion to stop. The next time Delay is
--   called, or if a Delay is currently blocking, the
--   Companion thread will exit with a CompanionDone
--   exception.
type StopCompanion (m :: Type -> Type) = m ()
instance GHC.Internal.Exception.Type.Exception Control.Concurrent.Companion.CompanionDone
instance GHC.Internal.Show.Show Control.Concurrent.Companion.CompanionDone
