Spec-Zone.ru › Haskell 7

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

Содержание

  • Трансформатор монады ErrorT
  • Операции с ошибками
  • Поднятие других операций
  • Примеры

Описание

Устарело: Используйте Control.Monad.Trans.Except вместо этого

Этот трансформатор монады добавляет возможность вызывать или генерировать исключения в монадe.

Последовательность действий завершается успешно, производя значение, только если все действия в последовательности успешны. Если одно действие завершается с ошибкой, остальная часть последовательности пропускается, и составное действие завершается с этой ошибкой.

Если значение ошибки не требуется, вместо этого можно использовать вариант в Control.Monad.Trans.Maybe.

Примечание: Этот модуль будет удален в будущей версии. Вместо этого используйте Control.Monad.Trans.Except, который не ограничивает тип исключения, а также включает базовый монад исключений.

Трансформатор монады ErrorT

class Error a where Source

Исключение, которое должно быть выброшено.

Минимальное полное определение: noMsg или strMsg.

Минимальное полное определение

Nothing

Методы

noMsg :: a Source

Создает исключение без сообщения. Реализация по умолчанию: strMsg "".

strMsg :: String -> a Source

Создает исключение с сообщением. Реализация по умолчанию strMsg s это noMsg.

Экземпляры

Error IOException
ErrorList a => Error [a]

Строка может быть выброшена как ошибка.

class ErrorList a where Source

Обходной путь, чтобы мы могли иметь экземпляр Haskell 98 Error String.

Методы

listMsg :: String -> [a] Source

Экземпляры

ErrorList Char

newtype ErrorT e m a Source

Трансформатор монады ошибок. Он может использоваться для добавления обработки ошибок к другим монадaм.

ErrorT структура Монад параметризована двумя вещами:

  • e - Тип ошибки.
  • m - Внутренняя монада.

Функция return дает успешное вычисление, в то время как >>= объединяет два подвычисления, завершаясь неудачей при первой ошибке.

Конструкторы

ErrorT

Поля

runErrorT :: m (Either e a)

Экземпляры

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

Преобразует вычисление без обертки с помощью заданной функции.

  • runErrorT (mapErrorT f m) = f (runErrorT m)

Операции с ошибками

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

Вызывает значение ошибки e.

  • runErrorT (throwError e) = return (Left e)
  • throwError e >>= m = throwError e

catchError Source

Аргументы

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

внутреннее вычисление

-> (e -> ErrorT e m a)

обработчик ошибок во внутреннем вычислении

-> ErrorT e m a

Обработка ошибки.

  • catchError h (lift m) = lift m
  • catchError h (throwError e) = 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API