Kind for types used as optic tags, such as A_Lens.
Moduleoptics-core-0.4.1.1Haskell2010
Optics.Optic
This module provides core definitions:
an opaque Optic type, which is parameterised over a type representing an optic kind (instantiated with tag types such as A_Lens);
the optic composition operator (%);
the subtyping relation Is with an accompanying castOptic function to convert an optic kind;
the JoinKinds class used to find the optic kind resulting from a composition.
Each optic kind is identified by a "tag type" (such as A_Lens), which is an empty data type. The type of the actual optics (such as Lens) is obtained by applying Optic to the tag type.
See the Optics module in the main optics package for overview
documentation.
- 6 types
- 7 classes
- 6 values
- Packageoptics-core-0.4.1.1
- Exports20
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceOptic.hs
Wrapper newtype for the whole family of optics.
The first parameter k identifies the particular optic kind (e.g. A_Lens
or A_Traversal).
The parameter is is a list of types available as indices. This will
typically be NoIx for unindexed optics, or WithIx for optics with a
single index. See the "Indexed optics" section of the overview documentation
in the Optics module of the main optics package for more details.
The parameters s and t represent the "big" structure,
whereas a and b represent the "small" structure.
Instances1IsLabel
(LabelOptic name k s t a b, is ~ NoIx) => IsLabel name (Optic k is s t a b)Defined in optics-core-0.4.1.1 · Optics.Label · orphan
Common special case of Optic where source and target types are equal.
Here, we need only one "big" and one "small" type. For lenses, this means that in the restricted form we cannot do type-changing updates.
Subtyping
3 declarationsSubtyping relationship between kinds of optics.
An instance of Is k l means that any Optic k can be used
as an Optic l. For example, we have an Is A_Lens
A_Traversal instance, but not Is A_Traversal A_Lens.
This class needs instances for all possible combinations of tags.
Instances38Is, …
TypeError (((('ShowType k ':<>: 'TextDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtyping" cannot be used as "
) ':<>: 'ShowType l) ':$$: 'Text"Perhaps you meant one of these:"
) ':$$: ShowEliminations (EliminationForms k)) => Is k lOverlappable instance for a custom type error.
Is A_Getter A_FoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Getter An_AffineFoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Lens A_FoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Lens A_GetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Lens A_SetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Lens A_TraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Lens An_AffineFoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Lens An_AffineTraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Prism A_FoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Prism A_ReviewDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Prism A_SetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Prism A_TraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Prism An_AffineFoldDefined 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 A_ReversedLens A_ReviewDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_ReversedPrism A_FoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_ReversedPrism A_GetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_ReversedPrism An_AffineFoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Traversal A_FoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs A_Traversal A_SetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_AffineFold A_FoldDefined 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 A_FoldDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_GetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_LensDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_PrismDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_ReversedLensDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_ReversedPrismDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_ReviewDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_SetterDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso A_TraversalDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingIs An_Iso 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.SubtypingIs k kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.SubtypingEvery kind of optic can be used as itself.
Computes the least upper bound of two optics kinds.
In presence of a JoinKinds k l m constraint Optic m represents the least
upper bound of an Optic k and an Optic l. This means in particular that
composition of an Optic k and an Optic k will yield an Optic m.
Instances105JoinKinds, …
(JoinKinds k l m, TypeError (('ShowType k ':<>: 'TextDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtyping" cannot be composed with "
) ':<>: 'ShowType l)) => JoinKinds k l mk ~ A_Fold => JoinKinds A_Fold A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold A_Traversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold An_AffineFold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold An_AffineTraversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Fold An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Getter A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Getter A_Traversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Lens A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Prism A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_ReversedPrism A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_ReversedPrism A_Traversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Traversal A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Traversal A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Traversal A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds A_Traversal An_AffineFold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds An_AffineFold A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Fold => JoinKinds An_AffineFold A_Traversal 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_Fold => JoinKinds An_Iso A_Fold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_Getter A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_Getter A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_Getter A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_Getter An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_Lens A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_Lens A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_ReversedPrism A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds A_ReversedPrism A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Getter => JoinKinds An_Iso A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Lens => JoinKinds A_Lens A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Lens => JoinKinds A_Lens An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Lens => JoinKinds An_Iso A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Prism => JoinKinds A_Prism A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Prism => JoinKinds A_Prism An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Prism => JoinKinds An_Iso A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_ReversedLens => JoinKinds A_ReversedLens A_ReversedLens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_ReversedLens => JoinKinds A_ReversedLens An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_ReversedLens => JoinKinds An_Iso A_ReversedLens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_ReversedPrism => JoinKinds A_ReversedPrism A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_ReversedPrism => JoinKinds A_ReversedPrism An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_ReversedPrism => JoinKinds An_Iso A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_Prism A_ReversedLens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_Prism A_Review kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_ReversedLens A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_ReversedLens A_Review kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_Review A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_Review A_ReversedLens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_Review A_Review kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds A_Review An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Review => JoinKinds An_Iso A_Review kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Lens A_Setter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Prism A_Setter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Setter A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Setter A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Setter A_Setter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Setter A_Traversal 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 A_Setter An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Setter => JoinKinds A_Traversal A_Setter 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_Setter => JoinKinds An_Iso A_Setter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Traversal => JoinKinds A_Lens A_Traversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Traversal => JoinKinds A_Prism A_Traversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Traversal => JoinKinds A_Traversal A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Traversal => JoinKinds A_Traversal A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ A_Traversal => JoinKinds A_Traversal A_Traversal 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 A_Traversal An_Iso 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 ~ A_Traversal => JoinKinds An_Iso A_Traversal kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_Getter A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_Getter An_AffineFold 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_Lens An_AffineFold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_Prism A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_Prism A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_Prism An_AffineFold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_ReversedPrism A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds A_ReversedPrism An_AffineFold 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 A_Getter kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineFold A_Lens kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineFold A_Prism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineFold A_ReversedPrism kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineFold => JoinKinds An_AffineFold An_AffineFold 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_AffineFold An_Iso 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_AffineFold => JoinKinds An_Iso An_AffineFold kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtypingk ~ An_AffineTraversal => JoinKinds A_Lens A_Prism 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 A_Lens 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.Subtypingk ~ An_Iso => JoinKinds An_Iso An_Iso kDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.Subtyping
Composition
3 declarationsThe usual operator for composing optics is (%), which allows different optic kinds to be composed, automatically calculating the resulting optic kind using JoinKinds.
The (.) function composition operator cannot be used to compose optics, because optics are not functions. The (.) operator from Control.Category cannot be used either, because it would not support type-changing optics or composing optics of different kinds.
Compose two optics of compatible flavours.
Returns an optic of the appropriate supertype. If either or both optics are indexed, the composition preserves all the indices.
Compose two optics of the same flavour.
Normally you can simply use (%) instead, but this may be useful to help type inference if the type of one of the optics is otherwise under-constrained.
Flipped function application, specialised to optics and binding tightly.
Useful for post-composing optics transformations:
toListOf (ifolded %& ifiltered (\i s -> length s <= i)) ["", "a","abc"]["","a"]
Monoid structures
0 declarationsIndexed optics
9 declarationsSee the "Indexed optics" section of the overview documentation in the
Optics module of the main optics package for more details on indexed
optics.
A list of index types, used for indexed optics.
An alias for an empty index-list
Singleton index list
In pseudo (dependent-)Haskell, provide a witness
foldr f (foldr f init xs) ys = foldr f init (ys ++ xs)
where f = (->)
Instances3AppendIndices
xs ~ zs => AppendIndices xs '[] zsDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.TypeLevelIf the second list is empty, we can pick the first list even if nothing is known about it.
ys ~ zs => AppendIndices '[] ys zsDefined in optics-core-0.4.1.1 · Optics.Internal.Optic.TypeLevelAppendIndices xs ys ks => AppendIndices (x ': xs) ys (x ': ks)Defined in optics-core-0.4.1.1 · Optics.Internal.Optic.TypeLevel
Check whether a list of indices is not empty and generate sensible error message if it's not.
Instances2NonEmptyIndices
TypeError ('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"Indexed optic is expected"
) => NonEmptyIndices '[]NonEmptyIndices (x ': xs)Defined in optics-core-0.4.1.1 · Optics.Internal.Indexed
Generate sensible error messages in case a user tries to pass either an unindexed optic or indexed optic with unflattened indices where indexed optic with a single index is expected.
Instances7HasSingleIndex, …
(TypeError ('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"Indexed optic is expected"
), '[] ~ '[i]) => HasSingleIndex '[] iHasSingleIndex '[i] iDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed(TypeError ('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"Use (<%>) or icompose to combine indices of type "
':<>: ShowTypes is), is ~ '[i1, i2], is ~ '[i]) => HasSingleIndex '[i1, i2] i(TypeError ('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"Use icompose3 to combine indices of type "
':<>: ShowTypes is), is ~ '[i1, i2, i3], is ~ '[i]) => HasSingleIndex '[i1, i2, i3] i(TypeError ('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"Use icompose4 to combine indices of type "
':<>: ShowTypes is), is ~ '[i1, i2, i3, i4], is ~ '[i]) => HasSingleIndex '[i1, i2, i3, i4] i(TypeError ('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"Use icompose5 to flatten indices of type "
':<>: ShowTypes is), is ~ '[i1, i2, i3, i4, i5], is ~ '[i]) => HasSingleIndex '[i1, i2, i3, i4, i5] i(TypeError ('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"Use icomposeN to flatten indices of type "
':<>: ShowTypes is), is ~ (i1 ': i2 ': i3 ': i4 ': i5 ': i6 ': is'), is ~ '[i]) => HasSingleIndex (i1 ': i2 ': i3 ': i4 ': i5 ': i6 ': is') i
Show useful error message when a function expects optics without indices.
Instances2AcceptsEmptyIndices
AcceptsEmptyIndices f '[]Defined in optics-core-0.4.1.1 · Optics.Internal.Indexed(TypeError (('TextDefined in optics-core-0.4.1.1 · Optics.Internal.Indexed"\8216"
':<>: 'Text f) ':<>: 'Text"\8217 accepts only optics with no indices"
), (x ': xs) ~ NoIx) => AcceptsEmptyIndices f (x ': xs)
Class that is inhabited by all type-level lists xs, providing the ability
to compose a function under Curry xs.
Instances2CurryCompose
CurryCompose '[]Defined in optics-core-0.4.1.1 · Optics.Internal.Optic.TypeLevelCurryCompose xs => CurryCompose (x ': xs)Defined in optics-core-0.4.1.1 · Optics.Internal.Optic.TypeLevel
Base re-exports
2 declarations& is a reverse application operator. This provides notational convenience. Its precedence is one higher than that of the forward application operator $, which allows & to be nested in $.
This is a version of flip id, where id is specialized from a -> a to (a -> b) -> (a -> b)
which by the associativity of (->) is (a -> b) -> a -> b.
flipping this yields a -> (a -> b) -> b which is the type signature of &
Examples
5 & (+1) & show"6"
sqrt $ [1 / n^2 | n <- [1..1000]] & sum & (*6)3.1406380562059946