Control.Monad.Trans.Except
| Copyright | (C) 2013 Ross Paterson |
|---|---|
| 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.Maybe.
Монад Except
type Except e = ExceptT e Identity Source
Параметризуемый монад исключений.
Вычисления представляют собой либо исключения, либо нормальные значения.
Функция return возвращает нормальное значение, в то время как >>= завершается при первом исключении. Для варианта, который продолжается после ошибки и собирает все ошибки, см. Errors.
except :: Either e a -> Except e a Source
Конструктор для вычислений в монаде исключений. (Обратное runExcept).
runExcept :: Except e a -> Either e a Source
Извлекатель для вычислений в монаде исключений. (Обратное except).
mapExcept :: (Either e a -> Either e' b) -> Except e a -> Except e' b Source
Отобразить развернутое вычисление, используя заданную функцию.
withExcept :: (e -> e') -> Except e a -> Except e' a Source
Преобразовать любые исключения, выброшенные вычислением, используя заданную функцию (специализация withExceptT).
Трансформатор монады ExceptT
Трансформатор монады, добавляющий исключения к другим монад.
ExceptT конструирует монад, параметризованный двумя вещами:
- e - Тип исключения.
- m - Внутренний монад.
Функция return дает вычисление, которое производит заданное значение, в то время как >>= упорядочивает два подвычисления, завершаясь при первом исключении.
Экземпляры
| MonadTrans (ExceptT e) | |
| Monad m => Monad (ExceptT e m) | |
| Functor m => Functor (ExceptT e m) | |
| MonadFix m => MonadFix (ExceptT e m) | |
| (Functor m, Monad m) => Applicative (ExceptT e m) | |
| Foldable f => Foldable (ExceptT e f) | |
| Traversable f => Traversable (ExceptT e f) | |
| (Functor m, Monad m, Monoid e) => Alternative (ExceptT e m) | |
| (Monad m, Monoid e) => MonadPlus (ExceptT e m) | |
| MonadIO m => MonadIO (ExceptT e m) | |
| (Show e, Show1 m) => Show1 (ExceptT e m) | |
| (Read e, Read1 m) => Read1 (ExceptT e m) | |
| (Ord e, Ord1 m) => Ord1 (ExceptT e m) | |
| (Eq e, Eq1 m) => Eq1 (ExceptT e m) | |
| (Eq e, Eq1 m, Eq a) => Eq (ExceptT e m a) | |
| (Ord e, Ord1 m, Ord a) => Ord (ExceptT e m a) | |
| (Read e, Read1 m, Read a) => Read (ExceptT e m a) | |
| (Show e, Show1 m, Show a) => Show (ExceptT e m a) |
runExceptT :: ExceptT e m a -> m (Either e a) Source
Обратное ExceptT.
mapExceptT :: (m (Either e a) -> n (Either e' b)) -> ExceptT e m a -> ExceptT e' n b Source
Отобразить развернутое вычисление, используя заданную функцию.
runExceptT(mapExceptTf m) = f (runExceptTm)
withExceptT :: Functor m => (e -> e') -> ExceptT e m a -> ExceptT e' m a Source
Преобразовать любые исключения, сгенерированные вычислением, с использованием заданной функции.
Операции с исключениями
throwE :: Monad m => e -> ExceptT e m a Source
Сгенерировать значение исключения e.
Аргументы
| :: Monad m | |
| => ExceptT e m a | внутреннее вычисление |
| -> (e -> ExceptT e' m a) | обработчик исключений во внутреннем вычислении |
| -> ExceptT e' m a |
Обработка исключения.
Поднятие других операций
liftCallCC :: CallCC m (Either e a) (Either e b) -> CallCC (ExceptT e m) a b Source
Поднять операцию callCC в новую монаду.
liftListen :: Monad m => Listen w m (Either e a) -> Listen w (ExceptT e m) a Source
Поднять операцию listen в новую монаду.
liftPass :: Monad m => Pass w m (Either e a) -> Pass w (ExceptT e m) a Source
Поднять операцию pass в новую монаду.
© 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-Except.html