conceit- Concurrent actions that may fail

Safe HaskellSafe-Inferred





newtype Conceit e a Source

Conceit is very similar to Concurrently from the async package, but it has an explicit error type e.

The Applicative instance runs two actions concurrently, waits until they finish, and combines their results.

However, if any of the actions fails with e the other action is immediately cancelled and the whole computation fails with e.

To put it another way: Conceit behaves like Concurrently for successes and like race for errors.




runConceit :: IO (Either e a)


Bifunctor Conceit 
Alternative (Conceit e) 
Monad (Conceit e)

>> sequences its arguments.

Functor (Conceit e) 
MonadPlus (Conceit e) 
Applicative (Conceit e) 
MonadThrow (Conceit e)

Throws exceptions into IO.

MonadCatch (Conceit e)

Catches exceptions from IO.

MonadIO (Conceit e) 
Plus (Conceit e)

zero is a computation that never finishes.

Alt (Conceit e)

<!> makes its two arguments race against each other.

Apply (Conceit s)

<.> is concurrent.

Bind (Conceit s)

>>- is sequential.

Monoid a => Monoid (Conceit e a) 

conceit :: IO (Either e a) -> IO (Either e b) -> IO (Either e (a, b)) Source

mapConceit :: Traversable t => (a -> IO (Either e b)) -> t a -> IO (Either e (t b)) Source

Works similarly to mapConcurrently from the async package, but if any of the computations fails with e, the others are immediately cancelled and the whole computation fails with e.


conceit' :: IO a -> IO b -> (MVar (Either SomeException (Either a b)) -> IO r) -> IO r Source

Verbatim copy of the internal concurrently' function from the async package.