optics-core-0.4.1: Optics as an abstract interface: core definitions
Safe Haskell None
Language Haskell2010

Optics.IxLens

Description

An IxLens is an indexed version of a Lens . 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

Formation

type IxLens i s t a b = Optic A_Lens ( WithIx i) s t a b Source #

Type synonym for a type-modifying indexed lens.

type IxLens' i s a = Optic' A_Lens ( WithIx i) s a Source #

Type synonym for a type-preserving indexed lens.

Introduction

ilens :: (s -> (i, a)) -> (s -> b -> t) -> IxLens i s t a b Source #

Build an indexed lens from a getter and a setter.

If you want to build an IxLens from the van Laarhoven representation, use ilensVL .

Elimination

An IxLens is in particular an IxGetter and an IxSetter , therefore you can specialise types to obtain:

iview :: IxLens i s t a b -> s -> (i, a)
iover :: IxLens i s t a b -> (i -> a -> b) -> s -> t
iset  :: IxLens i s t a b -> (i      -> b) -> s -> t

Additional introduction forms

chosen :: IxLens ( Either () ()) ( Either a a) ( Either b b) a b Source #

Focus on both sides of an Either .

devoid :: IxLens' i Void a Source #

There is an indexed field for every type in the Void .

>>> set (mapped % devoid) 1 []
[]
>>> over (_Just % devoid) abs Nothing
Nothing

ifst :: IxLens i (a, i) (b, i) a b Source #

Indexed _1 with other half of a pair as an index.

See isnd for examples.

Since: 0.4

isnd :: IxLens i (i, a) (i, b) a b Source #

Indexed _2 with other half of a pair as an index. Specialized version of itraversed to pairs, which can be IxLens .

>>> iview isnd ('a', True)
('a',True)

That is not possible with itraversed , because it is an IxTraversal .

>>> :t itraversed :: IxTraversal i (i, a) (i, b) a b
itraversed :: IxTraversal i (i, a) (i, b) a b
  :: IxTraversal i (i, a) (i, b) a b

Since: 0.4

Subtyping

data A_Lens :: OpticKind Source #

Tag for a lens.

Instances

Instances details
ReversibleOptic A_Lens Source #
Instance details

Defined in Optics.Re

Associated Types

type ReversedOptic A_Lens = (r :: Type ) Source #

Methods

re :: forall (is :: IxList ) s t a b. AcceptsEmptyIndices "re" is => Optic A_Lens is s t a b -> Optic ( ReversedOptic A_Lens ) is b a t s Source #

Is A_Lens A_Fold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens An_AffineFold Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens A_Getter Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens A_Setter Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens A_Traversal Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is A_Lens An_AffineTraversal Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Is An_Iso A_Lens Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

Arrow arr => ArrowOptic A_Lens arr Source #
Instance details

Defined in Optics.Arrow

Methods

overA :: forall (is :: IxList ) s t a b. Optic A_Lens is s t a b -> arr a b -> arr s t Source #

k ~ A_Fold => JoinKinds A_Fold A_Lens 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 ~ A_Getter => JoinKinds A_Getter A_Lens k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ A_Getter => JoinKinds A_ReversedPrism A_Lens k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineTraversal => JoinKinds A_Prism A_Lens k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ A_Fold => JoinKinds A_Lens A_Fold 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 ~ A_Getter => JoinKinds A_Lens A_Getter k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

k ~ A_Getter => JoinKinds A_Lens A_ReversedPrism k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

k ~ An_AffineTraversal => JoinKinds A_Lens A_Prism k Source #
Instance details

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

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

Defined in Optics.Internal.Optic.Subtyping

ToReadOnly A_Lens s t a b Source #
Instance details

Defined in Optics.ReadOnly

IxOptic A_Lens s t a b Source #
Instance details

Defined in Optics.Indexed.Core

( Functor f, f ~ g, s ~ t, a ~ b) => MappingOptic A_Lens f g s t a b Source #
Instance details

Defined in Optics.Mapping

Methods

mapping :: forall (is :: IxList ). AcceptsEmptyIndices "mapping" is => Optic A_Lens is s t a b -> Optic ( MappedOptic A_Lens ) is (f s) (g t) (f a) (g b) Source #

type ReversedOptic A_Lens Source #
Instance details

Defined in Optics.Re

type ReadOnlyOptic A_Lens Source #
Instance details

Defined in Optics.ReadOnly

type MappedOptic A_Lens Source #
Instance details

Defined in Optics.Mapping

van Laarhoven encoding

type IxLensVL i s t a b = forall f. Functor f => (i -> a -> f b) -> s -> f t Source #

Type synonym for a type-modifying van Laarhoven indexed lens.

type IxLensVL' i s a = IxLensVL i s s a a Source #

Type synonym for a type-preserving van Laarhoven indexed lens.

ilensVL :: IxLensVL i s t a b -> IxLens i s t a b Source #

Build an indexed lens from the van Laarhoven representation.

toIxLensVL :: ( Is k A_Lens , is `HasSingleIndex` i) => Optic k is s t a b -> IxLensVL i s t a b Source #

Convert an indexed lens to its van Laarhoven representation.

withIxLensVL :: ( Is k A_Lens , is `HasSingleIndex` i) => Optic k is s t a b -> ( IxLensVL i s t a b -> r) -> r Source #

Work with an indexed lens in the van Laarhoven representation.