Control.Monad.Trans.Error
| Copyright | (c) Michael Weber <michael.weber@post.rwth-aachen.de> 2001, (c) Jeff Newbern 2003-2006, (c) Andriy Palamarchuk 2006 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | ross@soi.city.ac.uk |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell98 |
Описание
Устарело: Используйте Control.Monad.Trans.Except вместо этого
Этот трансформатор монады добавляет возможность вызывать или генерировать исключения в монадe.
Последовательность действий завершается успешно, производя значение, только если все действия в последовательности успешны. Если одно действие завершается с ошибкой, остальная часть последовательности пропускается, и составное действие завершается с этой ошибкой.
Если значение ошибки не требуется, вместо этого можно использовать вариант в Control.Monad.Trans.Maybe.
Примечание: Этот модуль будет удален в будущей версии. Вместо этого используйте Control.Monad.Trans.Except, который не ограничивает тип исключения, а также включает базовый монад исключений.
Трансформатор монады ErrorT
Исключение, которое должно быть выброшено.
Минимальное полное определение: noMsg или strMsg.
Минимальное полное определение
Nothing
Методы
Создает исключение без сообщения. Реализация по умолчанию: strMsg "".
Создает исключение с сообщением. Реализация по умолчанию strMsg s это noMsg.
Экземпляры
| Error IOException | |
| ErrorList a => Error [a] | Строка может быть выброшена как ошибка. |
class ErrorList a where Source
Обходной путь, чтобы мы могли иметь экземпляр Haskell 98 Error String.
Трансформатор монады ошибок. Он может использоваться для добавления обработки ошибок к другим монадaм.
ErrorT структура Монад параметризована двумя вещами:
- e - Тип ошибки.
- m - Внутренняя монада.
Функция return дает успешное вычисление, в то время как >>= объединяет два подвычисления, завершаясь неудачей при первой ошибке.
Экземпляры
| 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) | |
| (Functor m, Monad m) => Applicative (ErrorT e m) | |
| Foldable f => Foldable (ErrorT e f) | |
| Traversable f => Traversable (ErrorT e f) | |
| (Functor m, Monad m, Error e) => Alternative (ErrorT e m) | |
| (Monad m, Error e) => MonadPlus (ErrorT e m) | |
| (Error e, MonadIO m) => MonadIO (ErrorT e m) | |
| (Show e, Show1 m) => Show1 (ErrorT e m) | |
| (Read e, Read1 m) => Read1 (ErrorT e m) | |
| (Ord e, Ord1 m) => Ord1 (ErrorT e m) | |
| (Eq e, Eq1 m) => Eq1 (ErrorT e m) | |
| (Eq e, Eq1 m, Eq a) => Eq (ErrorT e m a) | |
| (Ord e, Ord1 m, Ord a) => Ord (ErrorT e m a) | |
| (Read e, Read1 m, Read a) => Read (ErrorT e m a) | |
| (Show e, Show1 m, Show a) => Show (ErrorT e m a) |
mapErrorT :: (m (Either e a) -> n (Either e' b)) -> ErrorT e m a -> ErrorT e' n b Source
Преобразует вычисление без обертки с помощью заданной функции.
Операции с ошибками
throwError :: (Monad m, Error e) => e -> ErrorT e m a Source
Вызывает значение ошибки e.
runErrorT(throwErrore) =return(Lefte)throwErrore >>= m =throwErrore
Аргументы
| :: (Monad m, Error e) | |
| => ErrorT e m a | внутреннее вычисление |
| -> (e -> ErrorT e m a) | обработчик ошибок во внутреннем вычислении |
| -> ErrorT e m a |
Обработка ошибки.
catchErrorh (liftm) =liftmcatchErrorh (throwErrore) = h e
Поднимаем другие операции
liftCallCC :: CallCC m (Either e a) (Either e b) -> CallCC (ErrorT e m) a b Source
Поднять операцию callCC в новый монаду.
liftListen :: Monad m => Listen w m (Either e a) -> Listen w (ErrorT e m) a Source
Поднять операцию listen в новый монаду.
liftPass :: Monad m => Pass w m (Either e a) -> Pass w (ErrorT e m) a Source
Поднять операцию pass в новый монаду.
Примеры
Оборачивание действия IO, которое может выбросить ошибку e:
type ErrorWithIO e a = ErrorT e IO a ==> ErrorT (IO (Either e a))
Монада IO, обернутая в StateT внутри 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)))
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/transformers-0.4.2.0/Control-Monad-Trans-Error.html