| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Optics.AffineFold
Description
An AffineFold is a Fold that contains at most one
element, or a Getter where the function may be
partial.
Synopsis
- type AffineFold s a = Optic' An_AffineFold NoIx s a
- afolding :: (s -> Maybe a) -> AffineFold s a
- preview :: Is k An_AffineFold => Optic' k is s a -> s -> Maybe a
- previews :: Is k An_AffineFold => Optic' k is s a -> (a -> r) -> s -> Maybe r
- afoldVL :: (forall f. Functor f => (forall r. r -> f r) -> (a -> f u) -> s -> f v) -> AffineFold s a
- filtered :: (a -> Bool) -> AffineFold a a
- atraverseOf_ :: (Is k An_AffineFold, Functor f) => Optic' k is s a -> (forall r. r -> f r) -> (a -> f u) -> s -> f ()
- isn't :: Is k An_AffineFold => Optic' k is s a -> s -> Bool
- afailing :: (Is k An_AffineFold, Is l An_AffineFold) => Optic' k is s a -> Optic' l js s a -> AffineFold s a
- data An_AffineFold :: OpticKind
Formation
type AffineFold s a = Optic' An_AffineFold NoIx s a Source #
Type synonym for an affine fold.
Introduction
afolding :: (s -> Maybe a) -> AffineFold s a Source #
Create an AffineFold from a partial function.
>>>preview (afolding listToMaybe) "foo"Just 'f'
Elimination
preview :: Is k An_AffineFold => Optic' k is s a -> s -> Maybe a Source #
Retrieve the value targeted by an AffineFold.
>>>let _Right = prism Right $ either (Left . Left) Right
>>>preview _Right (Right 'x')Just 'x'
>>>preview _Right (Left 'y')Nothing
previews :: Is k An_AffineFold => Optic' k is s a -> (a -> r) -> s -> Maybe r Source #
Retrieve a function of the value targeted by an AffineFold.
Computation
Additional introduction forms
afoldVL :: (forall f. Functor f => (forall r. r -> f r) -> (a -> f u) -> s -> f v) -> AffineFold s a Source #
Obtain an AffineFold by lifting traverse_ like function.
afoldVL.atraverseOf_≡idatraverseOf_.afoldVL≡id
Since: 0.3
filtered :: (a -> Bool) -> AffineFold a a Source #
Filter result(s) of a fold that don't satisfy a predicate.
Additional elimination forms
atraverseOf_ :: (Is k An_AffineFold, Functor f) => Optic' k is s a -> (forall r. r -> f r) -> (a -> f u) -> s -> f () Source #
Traverse over the target of an AffineFold, computing a Functor-based
answer, but unlike atraverseOf do not construct a
new structure.
Since: 0.3
isn't :: Is k An_AffineFold => Optic' k is s a -> s -> Bool Source #
Check to see if this AffineFold doesn't match.
>>>isn't _Just NothingTrue
Monoid structure
AffineFold admits a monoid structure where afailing combines folds
(returning a result from the second fold only if the first returns none)
and the identity element is ignored (which
returns no results).
Note: There is no summing equivalent that returns an
AffineFold, because it would not need to return more than one result.
There is no Semigroup or Monoid instance for AffineFold, because
there is not a unique choice of monoid to use that works for all optics,
and the (<>) operator could not be used to combine optics of different
kinds.
afailing :: (Is k An_AffineFold, Is l An_AffineFold) => Optic' k is s a -> Optic' l js s a -> AffineFold s a infixl 3 Source #
Try the first AffineFold. If it returns no entry, try the second one.
>>>preview (ix 1 % re _Left `afailing` ix 2 % re _Right) [0,1,2,3]Just (Left 1)
>>>preview (ix 42 % re _Left `afailing` ix 2 % re _Right) [0,1,2,3]Just (Right 2)
Subtyping
data An_AffineFold :: OpticKind Source #
Tag for an affine fold.
Instances
