Type synonym for a type-modifying affine traversal.
Moduleoptics-core-0.4.1.1Haskell2010
Optics.AffineTraversal
An AffineTraversal is a Traversal that applies to at most one element.
These arise most frequently as the composition of a Lens with a Prism.
- 5 types
- 6 values
- Packageoptics-core-0.4.1.1
- Exports11
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceAffineTraversal.hs
Formation
2 declarationsType synonym for a type-preserving affine traversal.
Introduction
1 declarationBuild an affine traversal from a matcher and an updater.
If you want to build an AffineTraversal from the van Laarhoven representation, use atraversalVL.
Elimination
1 declarationAn AffineTraversal is in particular an AffineFold and a Setter, therefore you can specialise types to obtain:
preview :: AffineTraversal s t a b -> s -> Maybe a
over :: AffineTraversal s t a b -> (a -> b) -> s -> t
set :: AffineTraversal s t a b -> b -> s -> t
Computation
0 declarationsmatching (atraversal f g) ≡ f
isRight (f s) => set (atraversal f g) b s ≡ g s b
Additional introduction forms
1 declarationSee _head, _tail, _init and _last for AffineTraversals for container types.
Filter result(s) of a traversal that don't satisfy a predicate.
Note: This is not a legal Traversal, unless you are very careful not to invalidate the predicate on the target.
As a counter example, consider that given evens = unsafeFiltered even
the second Traversal law is violated:
over evens succ . Optics.over evens succ /= over evens (succ . succ)
So, in order for this to qualify as a legal Traversal you can only use it for actions that preserve the result of the predicate!
For a safe variant see indices (or filtered for read-only optics).
Additional elimination forms
1 declarationWork with an affine traversal as a matcher and an updater.
Subtyping
1 declarationTag for an affine traversal.
Instances30Is, ArrowOptic, JoinKinds, IxOptic, ToReadOnly, ReadOnlyOptic, …
Is A_Lens An_AffineTraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Prism An_AffineTraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_AffineTraversal A_FoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_AffineTraversal A_SetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_AffineTraversal A_TraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_AffineTraversal An_AffineFoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso An_AffineTraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingArrowChoice arr => ArrowOptic An_AffineTraversal arrDefined in optics-core-0.4.1.1 · Optics.Arrowk ~ A_Fold => JoinKinds A_Fold An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds An_AffineTraversal A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Setter An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds An_AffineTraversal A_Setter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Traversal => JoinKinds A_Traversal An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Traversal => JoinKinds An_AffineTraversal A_Traversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_Getter An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_ReversedPrism An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineFold An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineTraversal A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineTraversal A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineTraversal An_AffineFold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds A_Lens An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds A_Prism An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds An_AffineTraversal A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds An_AffineTraversal A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds An_AffineTraversal An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds An_AffineTraversal An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds An_Iso An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIxOptic An_AffineTraversal s t a bDefined in optics-core-0.4.1.1 · Optics.Indexed.CoreToReadOnly An_AffineTraversal s t a bDefined in optics-core-0.4.1.1 · Optics.ReadOnlytype ReadOnlyOptic An_AffineTraversal = An_AffineFoldDefined in optics-core-0.4.1.1 · Optics.ReadOnly
van Laarhoven encoding
4 declarationstype AffineTraversalVL s t a b = forall (f :: Type -> Type). Functor f => (forall r. r -> f r) -> (a -> f b) -> s -> f tType synonym for a type-modifying van Laarhoven 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).
A TraversalVL has Applicative available and
hence can combine the effects arising from multiple elements using
<*>. In contrast, an AffineTraversalVL has no way to combine
effects from multiple elements, so it must act on at most one
element. (It can act on none at all thanks to the availability of
point.)
Type synonym for a type-preserving van Laarhoven affine traversal.
Build an affine traversal from the van Laarhoven representation.
Example:
:{azSnd = atraversalVL $ \point f ab@(a, b) -> if a >= 'a' && a <= 'z' then (a, ) <$> f b else point ab:}
preview azSnd ('a', "Hi")Just "Hi"
preview azSnd ('@', "Hi")Nothing
over azSnd (++ "!!!") ('f', "Hi")('f',"Hi!!!")
set azSnd "Bye" ('Y', "Hi")('Y',"Hi")
Traverse over the target of an AffineTraversal and compute a Functor-based answer.