transformers-0.2.1.0: Concrete functor and monad transformersContentsIndex
Control.Monad.Trans.Error
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Contents
The ErrorT monad transformer
Error operations
Lifting other operations
Examples
Description

This monad transformer adds the ability to fail or throw exceptions to a monad.

A sequence of actions succeeds, producing a value, only if all the actions in the sequence are successful. If one fails with an error, the rest of the sequence is skipped and the composite action fails with that error.

If the value of the error is not required, the variant in Control.Monad.Trans.Maybe may be used instead.

Synopsis
class Error a where
noMsg :: a
strMsg :: String -> a
class ErrorList a where
listMsg :: String -> [a]
newtype ErrorT e m a = ErrorT {
runErrorT :: m (Either e a)
}
mapErrorT :: (m (Either e a) -> n (Either e' b)) -> ErrorT e m a -> ErrorT e' n b
throwError :: (Monad m, Error e) => e -> ErrorT e m a
catchError :: (Monad m, Error e) => ErrorT e m a -> (e -> ErrorT e m a) -> ErrorT e m a
liftCallCC :: (((Either e a -> m (Either e b)) -> m (Either e a)) -> m (Either e a)) -> ((a -> ErrorT e m b) -> ErrorT e m a) -> ErrorT e m a
liftListen :: Monad m => (m (Either e a) -> m (Either e a, w)) -> ErrorT e m a -> ErrorT e m (a, w)
liftPass :: Monad m => (m (Either e a, w -> w) -> m (Either e a)) -> ErrorT e m (a, w -> w) -> ErrorT e m a
The ErrorT monad transformer
class Error a where

An exception to be thrown.

Minimal complete definition: noMsg or strMsg.

Methods
noMsg :: a
Creates an exception without a message. The default implementation is strMsg "".
strMsg :: String -> a
Creates an exception with a message. The default implementation of strMsg s is noMsg.
show/hide Instances
Error IOException
ErrorList a => Error [a]A string can be thrown as an error.
class ErrorList a where
Workaround so that we can have a Haskell 98 instance Error String.
Methods
listMsg :: String -> [a]
show/hide Instances
newtype ErrorT e m a

The error monad transformer. It can be used to add error handling to other monads.

The ErrorT Monad structure is parameterized over two things:

  • e - The error type.
  • m - The inner monad.

The return function yields a successful computation, while >>= sequences two subcomputations, failing on the first error.

Constructors
ErrorT
runErrorT :: m (Either e a)
show/hide Instances
Error e => MonadTrans (ErrorT e)
(Monad m, Error e) => Monad (ErrorT e m)
Functor m => Functor (ErrorT e m)
(MonadFix m, Error e) => MonadFix (ErrorT e m)
(Monad m, Error e) => MonadPlus (ErrorT e m)
(Functor m, Monad m) => Applicative (ErrorT e m)
(Functor m, Monad m, Error e) => Alternative (ErrorT e m)
(Error e, MonadIO m) => MonadIO (ErrorT e m)
mapErrorT :: (m (Either e a) -> n (Either e' b)) -> ErrorT e m a -> ErrorT e' n b

Map the unwrapped computation using the given function.

Error operations
throwError :: (Monad m, Error e) => e -> ErrorT e m a

Signal an error value e.

catchError
:: (Monad m, Error e)
=> ErrorT e m athe inner computation
-> (e -> ErrorT e m a)a handler for errors in the inner computation
-> ErrorT e m a
Handle an error.
Lifting other operations
liftCallCC :: (((Either e a -> m (Either e b)) -> m (Either e a)) -> m (Either e a)) -> ((a -> ErrorT e m b) -> ErrorT e m a) -> ErrorT e m a
Lift a callCC operation to the new monad.
liftListen :: Monad m => (m (Either e a) -> m (Either e a, w)) -> ErrorT e m a -> ErrorT e m (a, w)
Lift a listen operation to the new monad.
liftPass :: Monad m => (m (Either e a, w -> w) -> m (Either e a)) -> ErrorT e m (a, w -> w) -> ErrorT e m a
Lift a pass operation to the new monad.
Examples
 -- wraps IO action that can throw an error e
 type ErrorWithIO e a = ErrorT e IO a
 ==> ErrorT (IO (Either e a))

 -- IO monad wrapped in StateT inside of ErrorT
 type ErrorAndStateWithIO e s a = ErrorT e (StateT s IO) a
 ==> ErrorT (StateT s IO (Either e a))
 ==> ErrorT (StateT (s -> IO (Either e a,s)))
Produced by Haddock version 2.7.2