lens-action-0.2.4: Monadic Getters and Folds

Copyright | (C) 2012-14 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable
Safe Haskell | None
Language | Haskell98

Control.Lens.Action.Type

Contents

- Getters and Folds
- Indexed
- Index-Preserving

Description

Synopsis

- type Action m s a = forall f r. Effective m r f => (a -> f a) -> s -> f s
- type MonadicFold m s a = forall f r. (Effective m r f, Applicative f) => (a -> f a) -> s -> f s
- type RelevantMonadicFold m s a = forall f r. (Effective m r f, Apply f) => (a -> f a) -> s -> f s
- type IndexedAction i m s a = forall p f r. (Indexable i p, Effective m r f) => p a (f a) -> s -> f s
- type IndexedMonadicFold i m s a = forall p f r. (Indexable i p, Effective m r f, Applicative f) => p a (f a) -> s -> f s
- type IndexedRelevantMonadicFold i m s a = forall p f r. (Indexable i p, Effective m r f, Apply f) => p a (f a) -> s -> f s
- type IndexPreservingAction m s a = forall p f r. (Conjoined p, Effective m r f) => p a (f a) -> p s (f s)
- type IndexPreservingMonadicFold m s a = forall p f r. (Conjoined p, Effective m r f, Applicative f) => p a (f a) -> p s (f s)
- type IndexPreservingRelevantMonadicFold m s a = forall p f r. (Conjoined p, Effective m r f, Apply f) => p a (f a) -> p s (f s)

# Getters and Folds

type Action m s a = forall f r. Effective m r f => (a -> f a) -> s -> f s Source #

An `Action` is a `Getter` enriched with access to a `Monad` for side-effects.

Every `Getter` can be used as an `Action`.

You can compose an `Action` with another `Action` using (`.`) from the `Prelude`.

type MonadicFold m s a = forall f r. (Effective m r f, Applicative f) => (a -> f a) -> s -> f s Source #

A `MonadicFold` is a `Fold` enriched with access to a `Monad` for side-effects.

A `MonadicFold` can use side-effects to produce parts of the structure being folded (e.g. reading them from file).

Every `Fold` can be used as a `MonadicFold`, that simply ignores the access to the `Monad`.

You can compose a `MonadicFold` with another `MonadicFold` using (`.`) from the `Prelude`.

type RelevantMonadicFold m s a = forall f r. (Effective m r f, Apply f) => (a -> f a) -> s -> f s Source #

# Indexed

type IndexedAction i m s a = forall p f r. (Indexable i p, Effective m r f) => p a (f a) -> s -> f s Source #

An `IndexedAction` is an `IndexedGetter` enriched with access to a `Monad` for side-effects.

Every `Getter` can be used as an `Action`.

You can compose an `Action` with another `Action` using (`.`) from the `Prelude`.

type IndexedMonadicFold i m s a = forall p f r. (Indexable i p, Effective m r f, Applicative f) => p a (f a) -> s -> f s Source #

An `IndexedMonadicFold` is an `IndexedFold` enriched with access to a `Monad` for side-effects.

Every `IndexedFold` can be used as an `IndexedMonadicFold`, that simply ignores the access to the `Monad`.

You can compose an `IndexedMonadicFold` with another `IndexedMonadicFold` using (`.`) from the `Prelude`.

type IndexedRelevantMonadicFold i m s a = forall p f r. (Indexable i p, Effective m r f, Apply f) => p a (f a) -> s -> f s Source #

# Index-Preserving

type IndexPreservingAction m s a = forall p f r. (Conjoined p, Effective m r f) => p a (f a) -> p s (f s) Source #

An `IndexPreservingAction` can be used as a `Action`, but when composed with an `IndexedTraversal`, `IndexedFold`, or `IndexedLens` yields an `IndexedMonadicFold`, `IndexedMonadicFold` or `IndexedAction` respectively.

type IndexPreservingMonadicFold m s a = forall p f r. (Conjoined p, Effective m r f, Applicative f) => p a (f a) -> p s (f s) Source #

An `IndexPreservingFold` can be used as a `Fold`, but when composed with an `IndexedTraversal`, `IndexedFold`, or `IndexedLens` yields an `IndexedFold` respectively.

type IndexPreservingRelevantMonadicFold m s a = forall p f r. (Conjoined p, Effective m r f, Apply f) => p a (f a) -> p s (f s) Source #