Data.Lens.Types
- Package
- purescript-profunctor-lenses
- Repository
- purescript-contrib/purescript-profunctor-lenses
This module defines types for working with lenses.
All optics have their normal name (e.g. Lens
)
and one whose name is prefixed with either "A"
or "An" (e.g. ALens
). Prefixed versions avoid the
issue of "impredicativity". To understand that concept
more and why prefixed names are sometimes necessary,
see the ./docs
folder.
#ATraversal Source
type ATraversal s t a b = Optic (Bazaar Function a b) s t a b
A traversal defined in terms of Bazaar
, which can be used
to avoid issues with impredicativity.
#ATraversal' Source
type ATraversal' s a = ATraversal s s a a
#AffineTraversal Source
type AffineTraversal s t a b = forall p. Strong p => Choice p => Optic p s t a b
An affine traversal (has at most one focus, but is not a prism).
#AffineTraversal' Source
type AffineTraversal' s a = AffineTraversal s s a a
#AnAffineTraversal Source
type AnAffineTraversal s t a b = Optic (Stall a b) s t a b
An affine traversal defined in terms of Stall
, which can be used
to avoid issues with impredicativity.
#AnAffineTraversal' Source
type AnAffineTraversal' s a = AnAffineTraversal s s a a
#AnIndexedLens Source
type AnIndexedLens i s t a b = IndexedOptic (Shop (Tuple i a) b) i s t a b
An indexed lens defined in terms of Shop
, which can be used
to avoid issues with impredicativity.
#AnIndexedLens' Source
type AnIndexedLens' i s a = AnIndexedLens i s s a a
#IndexedFold Source
type IndexedFold r i s t a b = IndexedOptic (Forget r) i s t a b
An indexed fold.
#IndexedFold' Source
type IndexedFold' r i s a = IndexedFold r i s s a a
#IndexedGetter Source
type IndexedGetter i s t a b = IndexedFold a i s t a b
An indexed getter.
#IndexedGetter' Source
type IndexedGetter' i s a = IndexedGetter i s s a a
#IndexedLens Source
type IndexedLens i s t a b = forall p. Strong p => IndexedOptic p i s t a b
An indexed lens.
#IndexedLens' Source
type IndexedLens' i s a = IndexedLens i s s a a
#IndexedOptic' Source
type IndexedOptic' :: (Type -> Type -> Type) -> Type -> Type -> Type -> Type
type IndexedOptic' p i s a = IndexedOptic p i s s a a
#IndexedSetter Source
type IndexedSetter i s t a b = IndexedOptic Function i s t a b
An indexed setter.
#IndexedSetter' Source
type IndexedSetter' i s a = IndexedSetter i s s a a
#IndexedTraversal Source
type IndexedTraversal i s t a b = forall p. Wander p => IndexedOptic p i s t a b
An indexed traversal.
#IndexedTraversal' Source
type IndexedTraversal' i s a = IndexedTraversal i s s a a
#Iso Source
type Iso s t a b = forall p. Profunctor p => Optic p s t a b
A generalized isomorphism.
#Lens Source
type Lens s t a b = forall p. Strong p => Optic p s t a b
Given a type whose "focus element" always exists, a lens provides a convenient way to view, set, and transform that element.
For example, _2
is a tuple-specific Lens
available from Data.Lens
, so:
over _2 String.length $ Tuple "ignore" "four" == Tuple "ignore" 4
Note the result has a different type than the original tuple.
That is, the four Lens
type variables have been narrowed to:
s
isTuple String String
t
isTuple String Int
a
isString
b
isInt
See Data.Lens.Getter
and Data.Lens.Setter
for functions and operators
frequently used with lenses.
#Lens' Source
type Lens' s a = Lens s s a a
Lens'
is a specialization of Lens
. An optic of type Lens'
can change only the value of its focus,
not its type. As an example, consider the Lens
_2
, which has this type:
_2 :: forall s t a b. Lens (Tuple s a) (Tuple t b) a b
_2
can produce a Tuple Int String
from a Tuple Int Int
:
set _2 "NEW" (Tuple 1 2) == (Tuple 1 "NEW")
If we specialize _2
's type with Lens'
, the following will not
type check:
set (_2 :: Lens' (Tuple Int Int) Int) "NEW" (Tuple 1 2)
^^^^^^^^^^^^^^^^^^^^^^^^^
See Data.Lens.Getter
and Data.Lens.Setter
for functions and operators
frequently used with lenses.
#Traversal' Source
type Traversal' s a = Traversal s s a a
Re-exports from Data.Lens.Internal.Exchange
Re-exports from Data.Lens.Internal.Forget
#Forget Source
Re-exports from Data.Lens.Internal.Grating
Re-exports from Data.Lens.Internal.Indexed
#Indexed Source
Re-exports from Data.Lens.Internal.Market
Re-exports from Data.Lens.Internal.Re
#Re Source
Re-exports from Data.Lens.Internal.Shop
Re-exports from Data.Lens.Internal.Stall
Re-exports from Data.Lens.Internal.Tagged
#Tagged Source
Re-exports from Data.Lens.Internal.Wander
#Wander Source
class Wander :: (Type -> Type -> Type) -> Constraint
class (Strong p, Choice p) <= Wander p where
Class for profunctors that support polymorphic traversals.
Members
wander :: forall s t a b. (forall f. Applicative f => (a -> f b) -> s -> f t) -> p a b -> p s t
Instances
Wander Function
(Applicative f) => Wander (Star f)
- Modules
- Data.
Lens - Data.
Lens. AffineTraversal - Data.
Lens. At - Data.
Lens. Common - Data.
Lens. Fold - Data.
Lens. Fold. Partial - Data.
Lens. Getter - Data.
Lens. Grate - Data.
Lens. Index - Data.
Lens. Indexed - Data.
Lens. Internal. Bazaar - Data.
Lens. Internal. Exchange - Data.
Lens. Internal. Focusing - Data.
Lens. Internal. Forget - Data.
Lens. Internal. Grating - Data.
Lens. Internal. Indexed - Data.
Lens. Internal. Market - Data.
Lens. Internal. Re - Data.
Lens. Internal. Shop - Data.
Lens. Internal. Stall - Data.
Lens. Internal. Tagged - Data.
Lens. Internal. Wander - Data.
Lens. Internal. Zipping - Data.
Lens. Iso - Data.
Lens. Iso. Newtype - Data.
Lens. Lens - Data.
Lens. Lens. Product - Data.
Lens. Lens. Tuple - Data.
Lens. Lens. Unit - Data.
Lens. Lens. Void - Data.
Lens. Prism - Data.
Lens. Prism. Coproduct - Data.
Lens. Prism. Either - Data.
Lens. Prism. Maybe - Data.
Lens. Record - Data.
Lens. Setter - Data.
Lens. Traversal - Data.
Lens. Types - Data.
Lens. Zoom