Spec-Zone.ru › Haskell 7

Control.Monad.Trans.Writer.Strict

Copyright (c) Andy Gill 2001, (c) Oregon Graduate Institute of Science and Technology, 2001
License BSD-style (see the file LICENSE)
Maintainer ross@soi.city.ac.uk
Stability experimental
Portability portable
Safe Haskell Safe
Language Haskell98

Содержание

  • Монад Writer
  • Трансформатор монады WriterT
  • Операции Writer
  • Поднятие других операций

Описание

Строгий трансформатор монады WriterT, который добавляет сбор выходных данных (таких как счётчик или строковый вывод) к заданному монаду.

Этот трансформатор монады предоставляет только ограниченный доступ к выводу во время вычисления. Для более общего доступа используйте Control.Monad.Trans.State вместо этого.

Эта версия строит свой вывод строго; для ленивой версии с тем же интерфейсом см. Control.Monad.Trans.Writer.Lazy. Хотя вывод строится строго, невозможно достичь поведения с постоянным пространством с помощью этого трансформатора: для этого используйте Control.Monad.Trans.State.Strict вместо этого.

Монад Writer

type Writer w = WriterT w Identity Source

Монад Writer, параметризованный типом w выходных данных для накопления.

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

writer :: Monad m => (a, w) -> WriterT w m a Source

Создаёт вычисление Writer из пары (результат, вывод). (Обратная функция к runWriter.)

runWriter :: Writer w a -> (a, w) Source

Разворачивает вычисление Writer как пару (результат, вывод). (Обратная функция к writer.)

execWriter :: Writer w a -> w Source

Извлекает вывод из вычисления Writer.

  • execWriter m = snd (runWriter m)

mapWriter :: ((a, w) -> (b, w')) -> Writer w a -> Writer w' b Source

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

  • runWriter (mapWriter f m) = f (runWriter m)

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

newtype WriterT w m a Source

Монад Writer, параметризованный:

  • w - вывод для накопления.
  • m - Внутренний монад.

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

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

WriterT

Поля

runWriterT :: m (a, w)

Экземпляры

Monoid w => MonadTrans (WriterT w)
(Monoid w, Monad m) => Monad (WriterT w m)
Functor m => Functor (WriterT w m)
(Monoid w, MonadFix m) => MonadFix (WriterT w m)
(Monoid w, Applicative m) => Applicative (WriterT w m)
Foldable f => Foldable (WriterT w f)
Traversable f => Traversable (WriterT w f)
(Monoid w, Alternative m) => Alternative (WriterT w m)
(Monoid w, MonadPlus m) => MonadPlus (WriterT w m)
(Monoid w, MonadIO m) => MonadIO (WriterT w m)
(Show w, Show1 m) => Show1 (WriterT w m)
(Read w, Read1 m) => Read1 (WriterT w m)
(Ord w, Ord1 m) => Ord1 (WriterT w m)
(Eq w, Eq1 m) => Eq1 (WriterT w m)
(Eq w, Eq1 m, Eq a) => Eq (WriterT w m a)
(Ord w, Ord1 m, Ord a) => Ord (WriterT w m a)
(Read w, Read1 m, Read a) => Read (WriterT w m a)
(Show w, Show1 m, Show a) => Show (WriterT w m a)

execWriterT :: Monad m => WriterT w m a -> m w Source

Извлекает вывод из вычисления Writer.

  • execWriterT m = liftM snd (runWriterT m)

mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b Source

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

  • runWriterT (mapWriterT f m) = f (runWriterT m)

Операции записи

tell :: (Monoid w, Monad m) => w -> WriterT w m () Source

tell w — это действие, которое производит вывод w.

listen :: (Monoid w, Monad m) => WriterT w m a -> WriterT w m (a, w) Source

listen m — это действие, которое выполняет действие m и добавляет его вывод к значению вычисления.

  • runWriterT (listen m) = liftM (\ (a, w) -> ((a, w), w)) (runWriterT m)

listens :: (Monoid w, Monad m) => (w -> b) -> WriterT w m a -> WriterT w m (a, b) Source

listens f m — это действие, которое выполняет действие m и добавляет результат применения f к выводу к значению вычисления.

  • listens f m = liftM (id *** f) (listen m)
  • runWriterT (listens f m) = liftM (\ (a, w) -> ((a, f w), w)) (runWriterT m)

pass :: (Monoid w, Monad m) => WriterT w m (a, w -> w) -> WriterT w m a Source

pass m — это действие, которое выполняет действие m, которое возвращает значение и функцию, и возвращает значение, применяя функцию к выводу.

  • runWriterT (pass m) = liftM (\ ((a, f), w) -> (a, f w)) (runWriterT m)

censor :: (Monoid w, Monad m) => (w -> w) -> WriterT w m a -> WriterT w m a Source

censor f m — это действие, которое выполняет действие m и применяет функцию f к его выводу, оставляя возвращаемое значение неизменным.

  • censor f m = pass (liftM (\ x -> (x,f)) m)
  • runWriterT (censor f m) = liftM (\ (a, w) -> (a, f w)) (runWriterT m)

Поднятие других операций

liftCallCC :: Monoid w => CallCC m (a, w) (b, w) -> CallCC (WriterT w m) a b Source

Поднятие операции callCC к новой монаде.

liftCatch :: Catch e m (a, w) -> Catch e (WriterT w m) a Source

Поднятие операции catchE к новой монаде.

© 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-Writer-Strict.html

Spec-Zone.ru

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