monadology-0.1: src/Control/Monad/Ology/Specific/ResultT.hs
module Control.Monad.Ology.Specific.ResultT where
import Control.Monad.Ology.Data.Exn
import Control.Monad.Ology.General
import Control.Monad.Ology.Specific.ComposeInner
import Control.Monad.Ology.Specific.Result
import Import
type ResultT e = ComposeInner (Result e)
runResultT :: forall m e a. ResultT e m a -> m (Result e a)
runResultT = unComposeInner
-- | Throw the parameterised exception type.
throwR ::
forall m e a. Monad m
=> e
-> ResultT e m a
throwR e = liftInner $ throwExc e
-- | Catch the parameterised exception type.
catchR ::
forall m e e' a. Monad m
=> ResultT e m a
-> (e -> ResultT e' m a)
-> ResultT e' m a
catchR (MkComposeInner rma) handler =
MkComposeInner $ do
rea <- rma
case rea of
SuccessResult a -> return $ SuccessResult a
FailureResult e -> unComposeInner $ handler e
resultExn ::
forall m e. Monad m
=> Exn (ResultT e m) e
resultExn = MkExn throwR catchR