hoist-error 0.3.0.0 → 0.3.1.0
raw patch · 4 files changed
+84/−42 lines, 4 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Control.Monad.Error.Hoist: ($dmfoldError) :: (PluckError e t m, Monad m) => (e -> m r) -> (a -> m r) -> t a -> m r
+ Control.Monad.Error.Hoist: ($dmpluckError) :: (PluckError e t m, Applicative m) => t a -> m (Either e a)
+ Control.Monad.Error.Hoist: hoistError' :: (PluckError e t m, MonadError e m) => t a -> m a
+ Control.Monad.Error.Hoist: hoistErrorM' :: (PluckError e t m, MonadError e m) => m (t a) -> m a
- Control.Monad.Error.Hoist: class PluckError e t m | t -> e
+ Control.Monad.Error.Hoist: class PluckError e (t :: Type -> Type) (m :: Type -> Type) | t -> e
- Control.Monad.Error.Hoist: foldError :: (PluckError e t m, Monad m) => (e -> m r) -> (a -> m r) -> t a -> m r
+ Control.Monad.Error.Hoist: foldError :: PluckError e t m => (e -> m r) -> (a -> m r) -> t a -> m r
- Control.Monad.Error.Hoist: pluckError :: (PluckError e t m, Applicative m) => t a -> m (Either e a)
+ Control.Monad.Error.Hoist: pluckError :: PluckError e t m => t a -> m (Either e a)
Files
- changelog.md +5/−0
- hoist-error.cabal +4/−2
- src/Control/Monad/Error/Hoist.hs +40/−18
- src/Control/Monad/Fail/Hoist.hs +35/−22
changelog.md view
@@ -1,3 +1,8 @@+0.3.1.0++* Add `Control.Monad.Error.Hoist.hoistError'` and+ `Control.Monad.Error.Hoist.hoistErrorM'`+ 0.3.0.0 * Replaced the `HoistError` typeclass, which is about monads, with a
hoist-error.cabal view
@@ -1,5 +1,5 @@ name: hoist-error-version: 0.3.0.0+version: 0.3.1.0 synopsis: Some convenience facilities for hoisting errors into a monad description: Provides a typeclass and useful combinators for hoisting errors into a monad. license: MIT@@ -20,6 +20,8 @@ , GHC == 9.4.5 , GHC == 9.6.4 , GHC == 9.8.2+ , GHC == 9.10.2+ , GHC == 9.12.2 source-repository head type: git@@ -29,7 +31,7 @@ exposed-modules: Control.Monad.Error.Hoist Control.Monad.Fail.Hoist- build-depends: base >=4.13 && <4.20+ build-depends: base >=4.13 && <4.22 , mtl >=2.2 && <2.4 hs-source-dirs: src
src/Control/Monad/Error/Hoist.hs view
@@ -36,7 +36,9 @@ module Control.Monad.Error.Hoist ( hoistError+ , hoistError' , hoistErrorM+ , hoistErrorM' -- ** Operators -- $mnemonics , (<%?>)@@ -59,9 +61,9 @@ -- computation into @m@. -- -- @--- 'hoistError' :: 'MonadError' e m -> (() -> e) -> 'Maybe' a -> m a--- 'hoistError' :: 'MonadError' e m -> (a -> e) -> 'Either' a b -> m b--- 'hoistError' :: 'MonadError' e m -> (a -> e) -> 'ExceptT' a m b -> m b+-- 'hoistError' :: 'MonadError' err m -> (() -> err) -> 'Maybe' a -> m a+-- 'hoistError' :: 'MonadError' err m -> (e -> err) -> 'Either' e a -> m a+-- 'hoistError' :: 'MonadError' err m -> (e -> err) -> 'ExceptT' e m a -> m a -- @ hoistError :: (PluckError e t m, MonadError e' m)@@ -70,12 +72,21 @@ -> m a hoistError f = foldError (throwError . f) pure +-- | @hoistError' = hoistError id@+--+-- @since 0.3.1.0+hoistError'+ :: (PluckError e t m, MonadError e m)+ => t a+ -> m a+hoistError' = hoistError id+ -- | A version of 'hoistError' that operates on values already in the monad. -- -- @--- 'hoistErrorM' :: 'MonadError' e m => (() -> e) -> m ('Maybe' a) -> m a--- 'hoistErrorM' :: 'MonadError' e m => (a -> e) -> m ('Either' a b) -> m b--- 'hoistErrorM' :: 'MonadError' e m => (a -> e) -> 'ExceptT' a m b -> 'ExceptT' a m b+-- 'hoistErrorM' :: 'MonadError' err m => (() -> err) -> m ('Maybe' a) -> m a+-- 'hoistErrorM' :: 'MonadError' err m => (e -> err) -> m ('Either' e b) -> m a+-- 'hoistErrorM' :: 'MonadError' err m => (e -> err) -> m 'ExceptT' e m b -> m a -- @ hoistErrorM :: (PluckError e t m, MonadError e' m)@@ -84,6 +95,15 @@ -> m a hoistErrorM e m = m >>= hoistError e +-- | @hoistErrorM' = hoistErrorM id@+--+-- @since 0.3.1.0+hoistErrorM'+ :: (PluckError e t m, MonadError e m)+ => m (t a)+ -> m a+hoistErrorM' = hoistErrorM id+ -- $mnemonics -- -- The operators in this package are named according to a scheme:@@ -103,9 +123,9 @@ -- | A flipped synonym for 'hoistError'. -- -- @--- ('<%?>') :: 'MonadError' e m => 'Maybe' a -> (() -> e) -> m a--- ('<%?>') :: 'MonadError' e m => 'Either' a b -> (a -> e) -> m b--- ('<%?>') :: 'MonadError' e m => 'ExceptT' a m b -> (a -> e) -> 'ExceptT' a m b+-- ('<%?>') :: 'MonadError' err m => 'Maybe' a -> (() -> err) -> m a+-- ('<%?>') :: 'MonadError' err m => 'Either' e a -> (e -> err) -> m a+-- ('<%?>') :: 'MonadError' err m => 'ExceptT' e m a -> (e -> err) -> m a -- @ (<%?>) :: (PluckError e t m, MonadError e' m)@@ -120,9 +140,9 @@ -- | A flipped synonym for 'hoistErrorM'. -- -- @--- ('<%!?>') :: 'MonadError' e m => m ('Maybe' a) -> (() -> e) -> m a--- ('<%!?>') :: 'MonadError' e m => m ('Either' a b) -> (a -> e) -> m b--- ('<%!?>') :: 'MonadError' e m => 'ExceptT' a m b -> (a -> e) -> 'ExceptT' a m b+-- ('<%!?>') :: 'MonadError' err m => m ('Maybe' a) -> (() -> err) -> m a+-- ('<%!?>') :: 'MonadError' err m => m ('Either' e a) -> (e -> err) -> m a+-- ('<%!?>') :: 'MonadError' err m => 'ExceptT' e m a -> (e -> err) -> 'ExceptT' e m a -- @ (<%!?>) :: (PluckError e t m, MonadError e' m)@@ -138,9 +158,9 @@ -- with a new one. -- -- @--- ('<?>') :: 'MonadError' e m => 'Maybe' a -> e -> m a--- ('<?>') :: 'MonadError' e m => 'Either' a b -> e -> m b--- ('<?>') :: 'MonadError' e m => 'ExceptT' a m b -> e -> 'ExceptT' a m b+-- ('<?>') :: 'MonadError' err m => 'Maybe' a -> err -> m a+-- ('<?>') :: 'MonadError' err m => 'Either' e a -> err -> m a+-- ('<?>') :: 'MonadError' err m => 'ExceptT' e m a -> err -> m a -- @ (<?>) :: (PluckError e t m, MonadError e' m)@@ -155,9 +175,9 @@ -- | A version of '<?>' that operates on values already in the monad. -- -- @--- ('<!?>') :: 'MonadError' e m => m ('Maybe' a) -> e -> m a--- ('<!?>') :: 'MonadError' e m => m ('Either' a b) -> e -> m b--- ('<!?>') :: 'MonadError' e m => 'ExceptT' a m b -> e -> 'ExceptT' a m b+-- ('<!?>') :: 'MonadError' err m => m ('Maybe' a) -> e -> m a+-- ('<!?>') :: 'MonadError' err m => m ('Either' e a) -> e -> m a+-- ('<!?>') :: 'MonadError' err m => m 'ExceptT' e m a -> e -> m a -- @ (<!?>) :: (PluckError e t m, MonadError e' m)@@ -172,6 +192,8 @@ {-# INLINE (<!?>) #-} -- | A class for plucking an error @e@ out of a partiality type @t@.+--+-- @since 0.3.0.0 class PluckError e t m | t -> e where pluckError :: t a -> m (Either e a) default pluckError :: Applicative m => t a -> m (Either e a)
src/Control/Monad/Fail/Hoist.hs view
@@ -31,9 +31,12 @@ -- computation into @m@. -- -- @--- 'hoistFail' :: 'MonadFail' m => (() -> String) -> 'Maybe' a -> m a--- 'hoistFail' :: 'MonadFail' m => (a -> String) -> 'Either' a b -> m b+-- 'hoistFail' :: 'MonadFail' m => (() -> String) -> 'Maybe' a -> m a+-- 'hoistFail' :: 'MonadFail' m => (e -> String) -> 'Either' e a -> m a+-- 'hoistFail' :: 'MonadFail' m => (e -> String) -> 'ExceptT' e m a -> m a -- @+--+-- @since 0.3.0.0 hoistFail :: (PluckError e t m, MonadFail m) => (e -> String)@@ -41,17 +44,21 @@ -> m a hoistFail f = foldError (fail . f) pure --- | Hoist computations whose error type is already 'String'.+-- | @hoistFail' = hoistFail id@+--+-- @since 0.3.0.0 hoistFail' :: (PluckError String t m, MonadFail m) => t a -> m a hoistFail' = hoistFail id -- | A version of 'hoistFail' that operates on values already in the monad. -- -- @--- 'hoistFailM' :: 'MonadFail' m => (() -> String) -> m ('Maybe' a) -> m a--- 'hoistFailM' :: 'MonadFail' m => (a -> String) -> m ('Either' a b) -> m b--- 'hoistFailM' :: 'MonadFail' m => (a -> String) -> 'ExceptT' a m b -> 'ExceptT' a m b+-- 'hoistFailM' :: 'MonadFail' m => (() -> String) -> m ('Maybe' a) -> m a+-- 'hoistFailM' :: 'MonadFail' m => (e -> String) -> m ('Either' e a) -> m a+-- 'hoistFailM' :: 'MonadFail' m => (e -> String) -> m ('ExceptT' e m a) -> m a -- @+--+-- @since 0.3.0.0 hoistFailM :: (PluckError e t m, MonadFail m) => (e -> String)@@ -59,13 +66,9 @@ -> m a hoistFailM f m = m >>= hoistFail f --- | A version of 'hoistFail'' that operates on values already in the monad.+-- | @hoistFailM' = hoistFailM id@ ----- @--- 'hoistFailM'' :: 'MonadFail' m => m ('Maybe' a) -> m a--- 'hoistFailM'' :: 'MonadFail' m => m ('Either' a b) -> m b--- 'hoistFailM'' :: 'MonadFail' m => 'ExceptT' a m b -> 'ExceptT' a m b--- @+-- @since 0.3.0.0 hoistFailM' :: (PluckError String t m, MonadFail m) => m (t a)@@ -75,9 +78,12 @@ -- | A flipped synonym for 'hoistFail'. Mnemonic: @#@ looks a bit like @F@. -- -- @--- ('<%#>') :: 'MonadFail' m => 'Maybe' a -> (() -> e) -> m a--- ('<%#>') :: 'MonadFail' m => 'Either' a b -> (a -> e) -> m b+-- ('<%#>') :: 'MonadFail' m => 'Maybe' a -> (() -> String) -> m a+-- ('<%#>') :: 'MonadFail' m => 'Either' e m a -> (e -> String) -> m a+-- ('<%#>') :: 'MonadFail' m => 'ExceptT' e m a -> (e -> String) -> m a -- @+--+-- @since 0.3.0.0 (<%#>) :: (PluckError e t m, MonadFail m) => t a@@ -91,10 +97,12 @@ -- | A flipped synonym for 'hoistFailM'. -- -- @--- ('<%!#>') :: 'MonadError' e m => m ('Maybe' a) -> (() -> e) -> m a--- ('<%!#>') :: 'MonadError' e m => m ('Either' a b) -> (a -> e) -> m b--- ('<%!#>') :: 'MonadError' e m => 'ExceptT' a m b -> (a -> e) -> 'ExceptT' a m b+-- ('<%!#>') :: 'MonadFail' m => m ('Maybe' a) -> (() -> String) -> m a+-- ('<%!#>') :: 'MonadFail' m => m ('Either' e a) -> (e -> String) -> m a+-- ('<%!#>') :: 'MonadFail' m => m ('ExceptT' e m a) -> (e -> String) -> m a -- @+--+-- @since 0.3.0.0 (<%!#>) :: (PluckError e t m, MonadFail m) => m (t a)@@ -109,9 +117,12 @@ -- with a new one. -- -- @--- ('<#>') :: 'MonadFail' m => 'Maybe' a -> String -> m a--- ('<#>') :: 'MonadFail' m => 'Either' a b -> String -> m b+-- ('<#>') :: 'MonadFail' m => 'Maybe' a -> String -> m a+-- ('<#>') :: 'MonadFail' m => 'Either' e a -> String -> m a+-- ('<#>') :: 'MonadFail' m => 'ExceptT' e m a -> String -> m a -- @+--+-- @since 0.3.0.0 (<#>) :: (PluckError e t m, MonadFail m) => t a@@ -125,10 +136,12 @@ -- | A version of '<#>' that operates on values already in the monad. -- -- @--- ('<!#>') :: 'MonadFail m => m ('Maybe' a) -> String -> m a--- ('<!#>') :: 'MonadFail m => m ('Either' a b) -> String -> m b--- ('<!#>') :: 'MonadFail m => 'ExceptT' a m b -> String -> 'ExceptT' a m b+-- ('<!#>') :: 'MonadFail' m => m ('Maybe' a) -> String -> m a+-- ('<!#>') :: 'MonadFail' m => m ('Either' e a) -> String -> m a+-- ('<!#>') :: 'MonadFail' m => m ('ExceptT' e m a) -> String -> m a -- @+--+-- @since 0.3.0.0 (<!#>) :: (PluckError e t m, MonadFail m) => m (t a)