Safe Haskell | None |
---|---|
Language | Haskell2010 |
An IxAffineTraversal
is an indexed version of an
AffineTraversal
. See the "Indexed optics" section
of the overview documentation in the Optics
module of the main optics
package for more details on indexed optics.
Synopsis
- type IxAffineTraversal i s t a b = Optic An_AffineTraversal (WithIx i) s t a b
- type IxAffineTraversal' i s a = Optic' An_AffineTraversal (WithIx i) s a
- iatraversal :: (s -> Either t (i, a)) -> (s -> b -> t) -> IxAffineTraversal i s t a b
- unsafeFilteredBy :: Is k An_AffineFold => Optic' k is a i -> IxAffineTraversal' i a a
- ignored :: IxAffineTraversal i s s a b
- data An_AffineTraversal :: OpticKind
- type IxAffineTraversalVL i s t a b = forall f. Functor f => (forall r. r -> f r) -> (i -> a -> f b) -> s -> f t
- type IxAffineTraversalVL' i s a = IxAffineTraversalVL i s s a a
- iatraversalVL :: IxAffineTraversalVL i s t a b -> IxAffineTraversal i s t a b
- iatraverseOf :: (Is k An_AffineTraversal, Functor f, is `HasSingleIndex` i) => Optic k is s t a b -> (forall r. r -> f r) -> (i -> a -> f b) -> s -> f t
Formation
type IxAffineTraversal i s t a b = Optic An_AffineTraversal (WithIx i) s t a b Source #
Type synonym for a type-modifying indexed affine traversal.
type IxAffineTraversal' i s a = Optic' An_AffineTraversal (WithIx i) s a Source #
Type synonym for a type-preserving indexed affine traversal.
Introduction
iatraversal :: (s -> Either t (i, a)) -> (s -> b -> t) -> IxAffineTraversal i s t a b Source #
Build an indexed affine traversal from a matcher and an updater.
If you want to build an IxAffineTraversal
from the van Laarhoven
representation, use iatraversalVL
.
Elimination
An IxAffineTraversal
is in particular an
IxAffineFold
and an IxSetter
,
therefore you can specialise types to obtain:
ipreview
::IxAffineTraversal
i s t a b -> s -> Maybe (i, a)
iover
::IxAffineTraversal
i s t a b -> (i -> a -> b) -> s -> tiset
::IxAffineTraversal
i s t a b -> (i -> b) -> s -> t
Combinators
unsafeFilteredBy :: Is k An_AffineFold => Optic' k is a i -> IxAffineTraversal' i a a Source #
Obtain a potentially empty IxAffineTraversal
by taking the element from
another AffineFold
and using it as an index.
- - Note: This is not a legal
IxTraversal
, unless you are very careful not to invalidate the predicate on the target (seeunsafeFiltered
for more details).
Since: 0.3
Additional introduction forms
ignored :: IxAffineTraversal i s s a b Source #
This is the trivial empty IxAffineTraversal
, i.e. the optic that targets
no substructures.
This is the identity element when a Fold
,
AffineFold
, IxFold
or
IxAffineFold
is viewed as a monoid.
>>>
6 & ignored %~ absurd
6
Subtyping
data An_AffineTraversal :: OpticKind Source #
Tag for an affine traversal.
Instances
van Laarhoven encoding
type IxAffineTraversalVL i s t a b = forall f. Functor f => (forall r. r -> f r) -> (i -> a -> f b) -> s -> f t Source #
Type synonym for a type-modifying van Laarhoven indexed affine traversal.
Note: this isn't exactly van Laarhoven representation as there is no
Pointed
class (which would be a superclass of Applicative
that contains
pure
but not <*>
). You can interpret the first argument as a dictionary
of Pointed
that supplies the point
function (i.e. the implementation of
pure
).
type IxAffineTraversalVL' i s a = IxAffineTraversalVL i s s a a Source #
Type synonym for a type-preserving van Laarhoven indexed affine traversal.
iatraversalVL :: IxAffineTraversalVL i s t a b -> IxAffineTraversal i s t a b Source #
Build an indexed affine traversal from the van Laarhoven representation.
iatraverseOf :: (Is k An_AffineTraversal, Functor f, is `HasSingleIndex` i) => Optic k is s t a b -> (forall r. r -> f r) -> (i -> a -> f b) -> s -> f t Source #
Traverse over the target of an IxAffineTraversal
and compute a
Functor
-based answer.
Since: 0.3