lifted-async-0.10.2.3: Run lifted IO operations asynchronously and wait for their results
Copyright Copyright (C) 2012-2018 Mitsutoshi Aoe
License BSD-style (see the file LICENSE)
Maintainer Mitsutoshi Aoe <maoe@foldr.in>
Stability experimental
Safe Haskell None
Language Haskell2010

Control.Concurrent.Async.Lifted

Description

This is a wrapped version of Control.Concurrent.Async with types generalized from IO to all monads in either MonadBase or MonadBaseControl .

All the functions restore the monadic effects in the forked computation unless specified otherwise.

If your monad stack satisfies StM m a ~ a (e.g. the reader monad), consider using Control.Concurrent.Async.Lifted.Safe module, which prevents you from messing up monadic effects.

Synopsis

Asynchronous actions

data Async a Source #

An asynchronous action spawned by async or withAsync . Asynchronous actions are executed in a separate thread, and operations are provided for waiting for asynchronous actions to complete and obtaining their results (see e.g. wait ).

Spawning

async :: MonadBaseControl IO m => m a -> m ( Async ( StM m a)) Source #

Generalized version of async .

asyncOn :: MonadBaseControl IO m => Int -> m a -> m ( Async ( StM m a)) Source #

Generalized version of asyncOn .

asyncWithUnmask :: MonadBaseControl IO m => (( forall b. m b -> m b) -> m a) -> m ( Async ( StM m a)) Source #

Generalized version of asyncWithUnmask .

asyncOnWithUnmask :: MonadBaseControl IO m => Int -> (( forall b. m b -> m b) -> m a) -> m ( Async ( StM m a)) Source #

Generalized version of asyncOnWithUnmask .

Spawning with automatic cancel ation

withAsync :: MonadBaseControl IO m => m a -> ( Async ( StM m a) -> m b) -> m b Source #

Generalized version of withAsync .

withAsyncBound :: MonadBaseControl IO m => m a -> ( Async ( StM m a) -> m b) -> m b Source #

Generalized version of withAsyncBound .

withAsyncOn :: MonadBaseControl IO m => Int -> m a -> ( Async ( StM m a) -> m b) -> m b Source #

Generalized version of withAsyncOn .

withAsyncWithUnmask :: MonadBaseControl IO m => (( forall c. m c -> m c) -> m a) -> ( Async ( StM m a) -> m b) -> m b Source #

Generalized version of withAsyncWithUnmask .

withAsyncOnWithUnmask :: MonadBaseControl IO m => Int -> (( forall c. m c -> m c) -> m a) -> ( Async ( StM m a) -> m b) -> m b Source #

Generalized version of withAsyncOnWithUnmask .

Quering Async s

wait :: MonadBaseControl IO m => Async ( StM m a) -> m a Source #

Generalized version of wait .

cancel :: MonadBase IO m => Async a -> m () Source #

Generalized version of cancel .

cancelWith :: ( MonadBase IO m, Exception e) => Async a -> e -> m () Source #

Generalized version of cancelWith .

asyncThreadId :: Async a -> ThreadId Source #

Returns the ThreadId of the thread running the given Async .

STM operations

waitSTM :: Async a -> STM a Source #

A version of wait that can be used inside an STM transaction.

pollSTM :: Async a -> STM ( Maybe ( Either SomeException a)) Source #

A version of poll that can be used inside an STM transaction.

waitCatchSTM :: Async a -> STM ( Either SomeException a) Source #

A version of waitCatch that can be used inside an STM transaction.

Waiting for multiple Async s

waitAny :: MonadBaseControl IO m => [ Async ( StM m a)] -> m ( Async ( StM m a), a) Source #

Generalized version of waitAny .

waitEither_ :: MonadBase IO m => Async a -> Async b -> m () Source #

Generalized version of waitEither_ .

NOTE: This function discards the monadic effects besides IO in the forked computation.

waitBoth :: MonadBaseControl IO m => Async ( StM m a) -> Async ( StM m b) -> m (a, b) Source #

Generalized version of waitBoth .

Waiting for multiple Async s in STM

waitAnySTM :: [ Async a] -> STM ( Async a, a) Source #

A version of waitAny that can be used inside an STM transaction.

Since: async-2.1.0

waitAnyCatchSTM :: [ Async a] -> STM ( Async a, Either SomeException a) Source #

A version of waitAnyCatch that can be used inside an STM transaction.

Since: async-2.1.0

waitEitherSTM :: Async a -> Async b -> STM ( Either a b) Source #

A version of waitEither that can be used inside an STM transaction.

Since: async-2.1.0

waitEitherCatchSTM :: Async a -> Async b -> STM ( Either ( Either SomeException a) ( Either SomeException b)) Source #

A version of waitEitherCatch that can be used inside an STM transaction.

Since: async-2.1.0

waitEitherSTM_ :: Async a -> Async b -> STM () Source #

A version of waitEither_ that can be used inside an STM transaction.

Since: async-2.1.0

waitBothSTM :: Async a -> Async b -> STM (a, b) Source #

A version of waitBoth that can be used inside an STM transaction.

Since: async-2.1.0

Linking

link :: MonadBase IO m => Async a -> m () Source #

Generalized version of link .

link2 :: MonadBase IO m => Async a -> Async b -> m () Source #

Generalized version of link2 .

Convenient utilities

race :: MonadBaseControl IO m => m a -> m b -> m ( Either a b) Source #

Generalized version of race .

race_ :: MonadBaseControl IO m => m a -> m b -> m () Source #

Generalized version of race_ .

NOTE: This function discards the monadic effects besides IO in the forked computation.

concurrently :: MonadBaseControl IO m => m a -> m b -> m (a, b) Source #

Generalized version of concurrently .

concurrently_ :: MonadBaseControl IO m => m a -> m b -> m () Source #

Generalized version of concurrently_ .

mapConcurrently :: ( Traversable t, MonadBaseControl IO m) => (a -> m b) -> t a -> m (t b) Source #

Generalized version of mapConcurrently .

mapConcurrently_ :: ( Foldable t, MonadBaseControl IO m) => (a -> m b) -> t a -> m () Source #

Generalized version of mapConcurrently_ .

forConcurrently :: ( Traversable t, MonadBaseControl IO m) => t a -> (a -> m b) -> m (t b) Source #

Generalized version of forConcurrently .

forConcurrently_ :: ( Foldable t, MonadBaseControl IO m) => t a -> (a -> m b) -> m () Source #

Generalized version of forConcurrently_ .

newtype Concurrently m a Source #

Generalized version of Concurrently .

A value of type Concurrently m a is an IO-based operation that can be composed with other Concurrently values, using the Applicative and Alternative instances.

Calling runConcurrently on a value of type Concurrently m a will execute the IO-based lifted operations it contains concurrently, before delivering the result of type a .

For example

  (page1, page2, page3) <- runConcurrently $ (,,)
    <$> Concurrently (getURL "url1")
    <*> Concurrently (getURL "url2")
    <*> Concurrently (getURL "url3")

Constructors

Concurrently

Fields

Instances

Instances details
Functor m => Functor ( Concurrently m) Source #
Instance details

Defined in Control.Concurrent.Async.Lifted

MonadBaseControl IO m => Applicative ( Concurrently m) Source #
Instance details

Defined in Control.Concurrent.Async.Lifted

MonadBaseControl IO m => Alternative ( Concurrently m) Source #
Instance details

Defined in Control.Concurrent.Async.Lifted

( MonadBaseControl IO m, Semigroup a) => Semigroup ( Concurrently m a) Source #
Instance details

Defined in Control.Concurrent.Async.Lifted

( MonadBaseControl IO m, Semigroup a, Monoid a) => Monoid ( Concurrently m a) Source #
Instance details

Defined in Control.Concurrent.Async.Lifted

compareAsyncs :: Async a -> Async b -> Ordering Source #

Compare two Asyncs that may have different types by their ThreadId .