{-# LANGUAGE FlexibleContexts #-}
module Control.Monad.Fail.Hoist
( hoistFail
, hoistFail'
, hoistFailM
, hoistFailM'
, (<%#>)
, (<%!#>)
, (<#>)
, (<!#>)
) where
import Control.Monad.Error.Hoist (PluckError(..))
hoistFail
:: (PluckError e t m, MonadFail m)
=> (e -> String)
-> t a
-> m a
hoistFail :: forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> t a -> m a
hoistFail e -> String
f = (e -> m a) -> (a -> m a) -> t a -> m a
forall r a. (e -> m r) -> (a -> m r) -> t a -> m r
forall e (t :: * -> *) (m :: * -> *) r a.
PluckError e t m =>
(e -> m r) -> (a -> m r) -> t a -> m r
foldError (String -> m a
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m a) -> (e -> String) -> e -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. e -> String
f) a -> m a
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
hoistFail' :: (PluckError String t m, MonadFail m) => t a -> m a
hoistFail' :: forall (t :: * -> *) (m :: * -> *) a.
(PluckError String t m, MonadFail m) =>
t a -> m a
hoistFail' = (String -> String) -> t a -> m a
forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> t a -> m a
hoistFail String -> String
forall a. a -> a
id
hoistFailM
:: (PluckError e t m, MonadFail m)
=> (e -> String)
-> m (t a)
-> m a
hoistFailM :: forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> m (t a) -> m a
hoistFailM e -> String
f m (t a)
m = m (t a)
m m (t a) -> (t a -> m a) -> m a
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (e -> String) -> t a -> m a
forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> t a -> m a
hoistFail e -> String
f
hoistFailM'
:: (PluckError String t m, MonadFail m)
=> m (t a)
-> m a
hoistFailM' :: forall (t :: * -> *) (m :: * -> *) a.
(PluckError String t m, MonadFail m) =>
m (t a) -> m a
hoistFailM' = (String -> String) -> m (t a) -> m a
forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> m (t a) -> m a
hoistFailM String -> String
forall a. a -> a
id
(<%#>)
:: (PluckError e t m, MonadFail m)
=> t a
-> (e -> String)
-> m a
<%#> :: forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
t a -> (e -> String) -> m a
(<%#>) = ((e -> String) -> t a -> m a) -> t a -> (e -> String) -> m a
forall a b c. (a -> b -> c) -> b -> a -> c
flip (e -> String) -> t a -> m a
forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> t a -> m a
hoistFail
infixl 8 <%#>
{-# INLINE (<%#>) #-}
(<%!#>)
:: (PluckError e t m, MonadFail m)
=> m (t a)
-> (e -> String)
-> m a
<%!#> :: forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
m (t a) -> (e -> String) -> m a
(<%!#>) = ((e -> String) -> m (t a) -> m a)
-> m (t a) -> (e -> String) -> m a
forall a b c. (a -> b -> c) -> b -> a -> c
flip (e -> String) -> m (t a) -> m a
forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> m (t a) -> m a
hoistFailM
infixl 8 <%!#>
{-# INLINE (<%!#>) #-}
(<#>)
:: (PluckError e t m, MonadFail m)
=> t a
-> String
-> m a
t a
m <#> :: forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
t a -> String -> m a
<#> String
e = t a
m t a -> (e -> String) -> m a
forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
t a -> (e -> String) -> m a
<%#> String -> e -> String
forall a b. a -> b -> a
const String
e
infixl 8 <#>
{-# INLINE (<#>) #-}
(<!#>)
:: (PluckError e t m, MonadFail m)
=> m (t a)
-> String
-> m a
m (t a)
m <!#> :: forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
m (t a) -> String -> m a
<!#> String
e = m (t a)
m m (t a) -> (t a -> m a) -> m a
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (e -> String) -> t a -> m a
forall e (t :: * -> *) (m :: * -> *) a.
(PluckError e t m, MonadFail m) =>
(e -> String) -> t a -> m a
hoistFail (String -> e -> String
forall a b. a -> b -> a
const String
e)
infixl 8 <!#>
{-# INLINE (<!#>) #-}