async-io-either-0.1.0.3: Could be useful

Safe HaskellNone
LanguageHaskell2010

Control.Concurrent.Async.Either

Description

These functions are partially inspired by the 'Catching All Exceptions' blog post that explains a useful way of pushing off a (IO a) of a risky or smelly nature, and having it provide a value indicating success or failure. This library does not go any further than taking this result to a value, be it an exception or the desired result. You get an either, that's it.

It can be used where normally you might have to use catch or similar mechanisms and you've already built a ExceptT having monad transformer stack in your application:

catch dangerous handleError

or if you've found yourself in the yucky position of having a throw buried in your otherwise pure code:

toMyError :: SomeException -> MyError
toMyError e = fromMaybe (throw e) | toMyError1 e | toMyError2 e
  where
    toMyError1 e' = Err1 $ fromException e'
    toMyError2 e' = Err2 $ fromException e'

Documentation

runAsyncToE :: MonadIO m => IO a -> (SomeException -> b) -> m (Either b a) Source #