Data.Lens.Lens
- Package
- purescript-profunctor-lenses
- Repository
- purescript-contrib/purescript-profunctor-lenses
This module defines functions for working with lenses.
#lens Source
lens :: forall s t a b. (s -> a) -> (s -> b -> t) -> Lens s t a b
Create a Lens
from a getter/setter pair.
> species = lens _.species $ _ {species = _}
> view species {species : "bovine"}
"bovine"
> _2 = lens Tuple.snd $ \(Tuple keep _) new -> Tuple keep new
Note: _2
is predefined in Data.Lens.Tuple
.
#ilens Source
ilens :: forall i s t a b. (s -> Tuple i a) -> (s -> b -> t) -> IndexedLens i s t a b
#ilens' Source
ilens' :: forall i s t a b. (s -> Tuple (Tuple i a) (b -> t)) -> IndexedLens i s t a b
#withIndexedLens Source
withIndexedLens :: forall i s t a b r. (AnIndexedLens i s t a b) -> ((s -> (Tuple i a)) -> (s -> b -> t) -> r) -> r
#cloneIndexedLens Source
cloneIndexedLens :: forall i s t a b. AnIndexedLens i s t a b -> IndexedLens i s t a b
#lensStore Source
lensStore :: forall s t a b. ALens s t a b -> s -> Tuple a (b -> t)
Converts a lens into the form that lens'
accepts.
Can be useful when defining a lens where the focus appears under multiple constructors of an algebraic data type. This function would be called for each case of the data type.
For example:
data LensStoreExample = LensStoreA Int | LensStoreB (Tuple Boolean Int)
lensStoreExampleInt :: Lens' LensStoreExample Int
lensStoreExampleInt = lens' case _ of
LensStoreA i -> map LensStoreA <$> lensStore identity i
LensStoreB i -> map LensStoreB <$> lensStore _2 i
Re-exports from Data.Lens.Types
#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.
#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.
#IndexedLens' Source
type IndexedLens' i s a = IndexedLens 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.
#AnIndexedLens' Source
type AnIndexedLens' i s a = AnIndexedLens i s s a a
#AnIndexedLens Source
type AnIndexedLens i s t a b = IndexedOptic (Shop (Tuple i a) b) i s t a b
- 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