optics-core-0.4.1: Optics as an abstract interface: core definitions
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

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

preview (afolding f) ≡ f

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_id
atraverseOf_ . afoldVLid

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 Nothing
True

The negation of this operator is is from Optics.Core.Extras .

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

Instances details
Is An_AffineFold A_Fold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Getter An_AffineFold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_ReversedPrism An_AffineFold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_AffineTraversal An_AffineFold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Prism An_AffineFold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens An_AffineFold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_Iso An_AffineFold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ A_Fold => JoinKinds A_Fold An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ A_Fold => JoinKinds An_AffineFold A_Fold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineFold An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineFold A_Getter k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineFold A_ReversedPrism k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ A_Fold => JoinKinds An_AffineFold A_Traversal k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineFold An_AffineTraversal k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineFold A_Prism k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineFold A_Lens k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineFold An_Iso k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds A_Getter An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds A_ReversedPrism An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ A_Fold => JoinKinds A_Traversal An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_AffineTraversal An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds A_Prism An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds A_Lens An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineFold => JoinKinds An_Iso An_AffineFold k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

(s ~ t, a ~ b) => ToReadOnly An_AffineFold s t a b Source #
Instance details

Defined in Optics.ReadOnly

(s ~ t, a ~ b) => IxOptic An_AffineFold s t a b Source #
Instance details

Defined in Optics.Indexed.Core

type ReadOnlyOptic An_AffineFold Source #
Instance details

Defined in Optics.ReadOnly