Safe Haskell | None |
---|---|
Language | Haskell2010 |
Control.Monad.Class.MonadAsync
Synopsis
- class (MonadSTM m, MonadThread m, MonadAsyncSTM (Async m) (STM m)) => MonadAsync m where
- type Async m :: Type -> Type
- async :: m a -> m (Async m a)
- asyncThreadId :: Proxy m -> Async m a -> ThreadId m
- withAsync :: m a -> (Async m a -> m b) -> m b
- wait :: Async m a -> m a
- poll :: Async m a -> m (Maybe (Either SomeException a))
- waitCatch :: Async m a -> m (Either SomeException a)
- cancel :: Async m a -> m ()
- cancelWith :: Exception e => Async m a -> e -> m ()
- uninterruptibleCancel :: Async m a -> m ()
- waitAny :: [Async m a] -> m (Async m a, a)
- waitAnyCatch :: [Async m a] -> m (Async m a, Either SomeException a)
- waitAnyCancel :: [Async m a] -> m (Async m a, a)
- waitAnyCatchCancel :: [Async m a] -> m (Async m a, Either SomeException a)
- waitEither :: Async m a -> Async m b -> m (Either a b)
- waitEitherCatch :: Async m a -> Async m b -> m (Either (Either SomeException a) (Either SomeException b))
- waitEitherCancel :: Async m a -> Async m b -> m (Either a b)
- waitEitherCatchCancel :: Async m a -> Async m b -> m (Either (Either SomeException a) (Either SomeException b))
- waitEither_ :: Async m a -> Async m b -> m ()
- waitBoth :: Async m a -> Async m b -> m (a, b)
- race :: m a -> m b -> m (Either a b)
- race_ :: m a -> m b -> m ()
- concurrently :: m a -> m b -> m (a, b)
- concurrently_ :: m a -> m b -> m ()
- asyncWithUnmask :: ((forall b. m b -> m b) -> m a) -> m (Async m a)
- class (Functor async, MonadSTMTx stm) => MonadAsyncSTM async stm where
- waitSTM :: async a -> stm a
- pollSTM :: async a -> stm (Maybe (Either SomeException a))
- waitCatchSTM :: async a -> stm (Either SomeException a)
- 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)
- waitEitherSTM_ :: async a -> async b -> stm ()
- waitEitherCatchSTM :: async a -> async b -> stm (Either (Either SomeException a) (Either SomeException b))
- waitBothSTM :: async a -> async b -> stm (a, b)
- data AsyncCancelled = AsyncCancelled
- data ExceptionInLinkedThread = ExceptionInLinkedThread String SomeException
- link :: (MonadAsync m, MonadFork m, MonadMask m) => Async m a -> m ()
- linkTo :: (MonadAsync m, MonadFork m, MonadMask m) => ThreadId m -> Async m a -> m ()
- linkOnly :: forall m a. (MonadAsync m, MonadFork m, MonadMask m) => (SomeException -> Bool) -> Async m a -> m ()
- linkToOnly :: forall m a. (MonadAsync m, MonadFork m, MonadMask m) => ThreadId m -> (SomeException -> Bool) -> Async m a -> m ()
- mapConcurrently :: (Traversable t, MonadAsync m) => (a -> m b) -> t a -> m (t b)
- forConcurrently :: (Traversable t, MonadAsync m) => t a -> (a -> m b) -> m (t b)
- mapConcurrently_ :: (Foldable f, MonadAsync m) => (a -> m b) -> f a -> m ()
- forConcurrently_ :: (Foldable f, MonadAsync m) => f a -> (a -> m b) -> m ()
- replicateConcurrently :: MonadAsync m => Int -> m a -> m [a]
- replicateConcurrently_ :: MonadAsync m => Int -> m a -> m ()
- newtype Concurrently m a = Concurrently {
- runConcurrently :: m a
Documentation
class (MonadSTM m, MonadThread m, MonadAsyncSTM (Async m) (STM m)) => MonadAsync m where Source #
Minimal complete definition
Methods
async :: m a -> m (Async m a) Source #
asyncThreadId :: Proxy m -> Async m a -> ThreadId m Source #
withAsync :: m a -> (Async m a -> m b) -> m b Source #
wait :: Async m a -> m a Source #
poll :: Async m a -> m (Maybe (Either SomeException a)) Source #
waitCatch :: Async m a -> m (Either SomeException a) Source #
cancel :: Async m a -> m () Source #
cancelWith :: Exception e => Async m a -> e -> m () Source #
uninterruptibleCancel :: Async m a -> m () Source #
default uninterruptibleCancel :: MonadMask m => Async m a -> m () Source #
waitAny :: [Async m a] -> m (Async m a, a) Source #
waitAnyCatch :: [Async m a] -> m (Async m a, Either SomeException a) Source #
waitAnyCancel :: [Async m a] -> m (Async m a, a) Source #
default waitAnyCancel :: MonadThrow m => [Async m a] -> m (Async m a, a) Source #
waitAnyCatchCancel :: [Async m a] -> m (Async m a, Either SomeException a) Source #
default waitAnyCatchCancel :: MonadThrow m => [Async m a] -> m (Async m a, Either SomeException a) Source #
waitEither :: Async m a -> Async m b -> m (Either a b) Source #
waitEitherCatch :: Async m a -> Async m b -> m (Either (Either SomeException a) (Either SomeException b)) Source #
Note, IO-based implementations should override the default
implementation. See the async
package implementation and comments.
http://hackage.haskell.org/package/async-2.2.1/docs/src/Control.Concurrent.Async.html#waitEitherCatch
waitEitherCancel :: Async m a -> Async m b -> m (Either a b) Source #
default waitEitherCancel :: MonadThrow m => Async m a -> Async m b -> m (Either a b) Source #
waitEitherCatchCancel :: Async m a -> Async m b -> m (Either (Either SomeException a) (Either SomeException b)) Source #
default waitEitherCatchCancel :: MonadThrow m => Async m a -> Async m b -> m (Either (Either SomeException a) (Either SomeException b)) Source #
waitEither_ :: Async m a -> Async m b -> m () Source #
waitBoth :: Async m a -> Async m b -> m (a, b) Source #
race :: m a -> m b -> m (Either a b) Source #
race_ :: m a -> m b -> m () Source #
concurrently :: m a -> m b -> m (a, b) Source #
concurrently_ :: m a -> m b -> m () Source #
asyncWithUnmask :: ((forall b. m b -> m b) -> m a) -> m (Async m a) Source #
Instances
class (Functor async, MonadSTMTx stm) => MonadAsyncSTM async stm where Source #
Minimal complete definition
Methods
waitSTM :: async a -> stm a Source #
default waitSTM :: MonadThrow stm => async a -> stm a Source #
pollSTM :: async a -> stm (Maybe (Either SomeException a)) Source #
waitCatchSTM :: async a -> stm (Either SomeException a) Source #
waitAnySTM :: [async a] -> stm (async a, a) Source #
default waitAnySTM :: MonadThrow stm => [async a] -> stm (async a, a) Source #
waitAnyCatchSTM :: [async a] -> stm (async a, Either SomeException a) Source #
waitEitherSTM :: async a -> async b -> stm (Either a b) Source #
default waitEitherSTM :: MonadThrow stm => async a -> async b -> stm (Either a b) Source #
waitEitherSTM_ :: async a -> async b -> stm () Source #
default waitEitherSTM_ :: MonadThrow stm => async a -> async b -> stm () Source #
waitEitherCatchSTM :: async a -> async b -> stm (Either (Either SomeException a) (Either SomeException b)) Source #
waitBothSTM :: async a -> async b -> stm (a, b) Source #
default waitBothSTM :: MonadThrow stm => async a -> async b -> stm (a, b) Source #
Instances
MonadAsyncSTM Async STM Source # | |
Defined in Control.Monad.Class.MonadAsync Methods waitSTM :: Async a -> STM a Source # pollSTM :: Async a -> STM (Maybe (Either SomeException a)) Source # waitCatchSTM :: Async a -> STM (Either SomeException a) Source # waitAnySTM :: [Async a] -> STM (Async a, a) Source # waitAnyCatchSTM :: [Async a] -> STM (Async a, Either SomeException a) Source # waitEitherSTM :: Async a -> Async b -> STM (Either a b) Source # waitEitherSTM_ :: Async a -> Async b -> STM () Source # waitEitherCatchSTM :: Async a -> Async b -> STM (Either (Either SomeException a) (Either SomeException b)) Source # |
data AsyncCancelled Source #
The exception thrown by cancel
to terminate a thread.
Constructors
AsyncCancelled |
Instances
Eq AsyncCancelled | |
Defined in Control.Concurrent.Async Methods (==) :: AsyncCancelled -> AsyncCancelled -> Bool Source # (/=) :: AsyncCancelled -> AsyncCancelled -> Bool Source # | |
Show AsyncCancelled | |
Defined in Control.Concurrent.Async | |
Exception AsyncCancelled | |
Defined in Control.Concurrent.Async Methods toException :: AsyncCancelled -> SomeException Source # fromException :: SomeException -> Maybe AsyncCancelled Source # |
data ExceptionInLinkedThread Source #
Exception from child thread re-raised in parent thread
We record the thread ID of the child thread as a String
. This avoids
an m
parameter in the type, which is important: ExceptionInLinkedThread
must be an instance of Exception
, requiring it to be Typeable
; if m
appeared in the type, we would require m
to be Typeable
, which does not
work with with the simulator, as it would require a Typeable
constraint
on the s
parameter of IOSim
.
Constructors
ExceptionInLinkedThread String SomeException |
Instances
linkTo :: (MonadAsync m, MonadFork m, MonadMask m) => ThreadId m -> Async m a -> m () Source #
Generalizion of link
that links an async to an arbitrary thread.
linkOnly :: forall m a. (MonadAsync m, MonadFork m, MonadMask m) => (SomeException -> Bool) -> Async m a -> m () Source #
linkToOnly :: forall m a. (MonadAsync m, MonadFork m, MonadMask m) => ThreadId m -> (SomeException -> Bool) -> Async m a -> m () Source #
mapConcurrently :: (Traversable t, MonadAsync m) => (a -> m b) -> t a -> m (t b) Source #
forConcurrently :: (Traversable t, MonadAsync m) => t a -> (a -> m b) -> m (t b) Source #
mapConcurrently_ :: (Foldable f, MonadAsync m) => (a -> m b) -> f a -> m () Source #
forConcurrently_ :: (Foldable f, MonadAsync m) => f a -> (a -> m b) -> m () Source #
replicateConcurrently :: MonadAsync m => Int -> m a -> m [a] Source #
replicateConcurrently_ :: MonadAsync m => Int -> m a -> m () Source #
newtype Concurrently m a Source #
Similar to Concurrently
but which works for any MonadAsync
instance.
Constructors
Concurrently | |
Fields
|