companion-0.1.0: A Haskell library to provide companion threads.

Safe Haskell | None
Language | Haskell2010

Control.Concurrent.Companion

Description

Companion threads, such as for printing messages saying we're still busy.

Synopsis

- withCompanion :: MonadUnliftIO m => Companion m -> (StopCompanion m -> m a) -> m a
- onCompanionDone :: MonadUnliftIO m => m () -> m () -> m ()
- type Companion (m :: Type -> Type) = Delay -> m ()
- type Delay = forall (mio :: Type -> Type). MonadIO mio => Int -> mio ()
- type StopCompanion (m :: Type -> Type) = m ()

# Documentation

withCompanion :: MonadUnliftIO m => Companion m -> (StopCompanion m -> m a) -> m a Source #

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.

onCompanionDone Source #

Arguments

:: MonadUnliftIO m |
=> m () | the delay
-> m () | action to perform
-> m () |

When a delay was interrupted because we're told to stop, perform this action.

type Companion (m :: Type -> Type) = Delay -> m () Source #

A companion thread which can perform arbitrary actions as well as delay.

type Delay = forall (mio :: Type -> Type). MonadIO mio => Int -> mio () Source #

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 StopCompanion (m :: Type -> Type) = m () Source #

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.