errors-ext 0.4 → 0.4.1
raw patch · 2 files changed
+8/−3 lines, 2 files
Files
- errors-ext.cabal +1/−1
- src/Control/Error/Extensions.hs +7/−2
errors-ext.cabal view
@@ -1,5 +1,5 @@ name: errors-ext-version: 0.4+version: 0.4.1 synopsis: `bracket`-like functions for `ExceptT` over `IO` monad. description: `bracket`-like functions for `ExceptT` over `IO` monad. homepage: https://github.com/A1-Triard/errors-ext#readme
src/Control/Error/Extensions.hs view
@@ -14,7 +14,7 @@ -- limitations under the License. -- --- | This module exports 'bracket'-like functions for 'ExceptT'.+-- | This module exports 'bracket'-like functions for @'Control.Monad.Trans.Except.ExceptT' e 'IO'@. module Control.Error.Extensions ( bracketE@@ -32,18 +32,23 @@ liftedBracketOnError :: MonadBaseControl IO m => m a -> (a -> m b) -> (a -> m c) -> m c liftedBracketOnError acquire release action = control $ \run -> bracketOnError (run acquire) (\saved -> run (restoreM saved >>= release)) (\saved -> run (restoreM saved >>= action))+{-# INLINE liftedBracketOnError #-} liftedHandleAll :: MonadBaseControl IO m => (SomeException -> m a) -> m a -> m a liftedHandleAll handler action = control $ \run -> handleAll (run . handler) (run action)+{-# INLINE liftedHandleAll #-} runErrorM :: MonadError e m => m a -> m (Either e a) runErrorM a = catchError (Right <$> a) (return . Left)+{-# INLINE runErrorM #-} errorM :: MonadError e m => m (Either e a) -> m a errorM = (either throwError return =<<)+{-# INLINE errorM #-} --- | Analogous to 'bracket', but for @'ExceptT' e 'IO'@ (or any 'MonadError' allowing 'bracket' lifting).+-- | Analogous to 'bracket', but for @'Control.Monad.Trans.Except.ExceptT' e 'IO'@+-- (or any 'MonadError' allowing 'bracket' lifting). bracketE :: (MonadBaseControl IO m, MonadError e m) => m a -> (a -> m b) -> (a -> m c) -> m c bracketE acquire release action = errorM $ do resource <- runErrorM acquire