lifted-async-0.10.2: Run lifted IO operations asynchronously and wait for their results
CopyrightCopyright (C) 2012-2018 Mitsutoshi Aoe
LicenseBSD-style (see the file LICENSE)
MaintainerMitsutoshi Aoe <maoe@foldr.in>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

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 #

Instances

Instances details
Functor Async 
Instance details

Defined in Control.Concurrent.Async

Methods

fmap :: (a -> b) -> Async a -> Async b

(<$) :: a -> Async b -> Async a

Eq (Async a) 
Instance details

Defined in Control.Concurrent.Async

Methods

(==) :: Async a -> Async a -> Bool

(/=) :: Async a -> Async a -> Bool

Ord (Async a) 
Instance details

Defined in Control.Concurrent.Async

Methods

compare :: Async a -> Async a -> Ordering

(<) :: Async a -> Async a -> Bool

(<=) :: Async a -> Async a -> Bool

(>) :: Async a -> Async a -> Bool

(>=) :: Async a -> Async a -> Bool

max :: Async a -> Async a -> Async a

min :: Async a -> Async a -> Async a

Hashable (Async a) 
Instance details

Defined in Control.Concurrent.Async

Methods

hashWithSalt :: Int -> Async a -> Int

hash :: Async a -> Int

Spawning

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

Generalized version of async.

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

Generalized version of asyncBound.

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 cancelation

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 Asyncs

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

Generalized version of wait.

poll :: MonadBaseControl IO m => Async (StM m a) -> m (Maybe (Either SomeException a)) Source #

Generalized version of poll.

waitCatch :: MonadBaseControl IO m => Async (StM m a) -> m (Either SomeException a) Source #

Generalized version of waitCatch.

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

Generalized version of cancel.

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

Generalized version of uninterruptibleCancel.

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

Generalized version of cancelWith.

asyncThreadId :: Async a -> ThreadId #

data AsyncCancelled #

Constructors

AsyncCancelled 

Instances

Instances details
Eq AsyncCancelled 
Instance details

Defined in Control.Concurrent.Async

Show AsyncCancelled 
Instance details

Defined in Control.Concurrent.Async

Methods

showsPrec :: Int -> AsyncCancelled -> ShowS

show :: AsyncCancelled -> String

showList :: [AsyncCancelled] -> ShowS

Exception AsyncCancelled 
Instance details

Defined in Control.Concurrent.Async

Methods

toException :: AsyncCancelled -> SomeException

fromException :: SomeException -> Maybe AsyncCancelled

displayException :: AsyncCancelled -> String

STM operations

waitSTM :: Async a -> STM a #

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

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

Waiting for multiple Asyncs

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

Generalized version of waitAny.

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

Generalized version of waitAnyCatch.

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

Generalized version of waitAnyCancel.

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

Generalized version of waitAnyCatchCancel.

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

Generalized version of waitEither.

waitEitherCatch :: MonadBaseControl IO m => Async (StM m a) -> Async (StM m b) -> m (Either (Either SomeException a) (Either SomeException b)) Source #

Generalized version of waitEitherCatch.

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

Generalized version of waitEitherCancel.

waitEitherCatchCancel :: MonadBaseControl IO m => Async (StM m a) -> Async (StM m b) -> m (Either (Either SomeException a) (Either SomeException b)) Source #

Generalized version of waitEitherCatchCancel.

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 Asyncs in STM

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

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

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

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

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

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

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.

data ExceptionInLinkedThread #

Constructors

ExceptionInLinkedThread (Async a) SomeException 

Instances

Instances details
Show ExceptionInLinkedThread 
Instance details

Defined in Control.Concurrent.Async

Exception ExceptionInLinkedThread 
Instance details

Defined in Control.Concurrent.Async

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_.

replicateConcurrently :: MonadBaseControl IO m => Int -> m a -> m [a] Source #

Generalized version of replicateConcurrently.

replicateConcurrently_ :: MonadBaseControl IO m => Int -> m a -> m () Source #

Generalized version of replicateConcurrently_.

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

Methods

fmap :: (a -> b) -> Concurrently m a -> Concurrently m b

(<$) :: a -> Concurrently m b -> Concurrently m a

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

Defined in Control.Concurrent.Async.Lifted

Methods

pure :: a -> Concurrently m a

(<*>) :: Concurrently m (a -> b) -> Concurrently m a -> Concurrently m b

liftA2 :: (a -> b -> c) -> Concurrently m a -> Concurrently m b -> Concurrently m c

(*>) :: Concurrently m a -> Concurrently m b -> Concurrently m b

(<*) :: Concurrently m a -> Concurrently m b -> Concurrently m a

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

Methods

(<>) :: Concurrently m a -> Concurrently m a -> Concurrently m a

sconcat :: NonEmpty (Concurrently m a) -> Concurrently m a

stimes :: Integral b => b -> Concurrently m a -> Concurrently m a

(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 #