Module

Data.Lens.Zoom

Package
purescript-profunctor-lenses
Repository
purescript-contrib/purescript-profunctor-lenses

This module defines functions for zooming in a state monad.

#zoom Source

zoom :: forall a s r m. Optic' (Star (Focusing m r)) s a -> StateT a m r -> StateT s m r

Zooms into a substate in a StateT transformer.

Re-exports from Data.Lens.Types

#Traversal' Source

type Traversal' s a = Traversal s s a a

#Traversal Source

type Traversal s t a b = forall p. Wander p => Optic p s t a b

A traversal.

#Stall Source

data Stall a b s t

The Stall profunctor characterizes an AffineTraversal.

Constructors

Instances

#Shop Source

data Shop a b s t

The Shop profunctor characterizes a Lens.

Constructors

  • Shop (s -> a) (s -> b -> t)

Instances

#Setter' Source

type Setter' s a = Setter s s a a

#Setter Source

type Setter s t a b = Optic Function s t a b

A setter.

#Review' Source

type Review' s a = Review s s a a

#Review Source

type Review s t a b = Optic Tagged s t a b

#Re Source

newtype Re p s t a b

Constructors

  • Re (p b a -> p t s)

Instances

#Prism' Source

type Prism' s a = Prism s s a a

#Prism Source

type Prism s t a b = forall p. Choice p => Optic p s t a b

A prism.

#Optic' Source

type Optic' p s a = Optic p s s a a

#Optic Source

type Optic p s t a b = p a b -> p s t

#Market Source

data Market a b s t

The Market profunctor characterizes a Prism.

Constructors

Instances

#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 is Tuple String String
  • t is Tuple String Int
  • a is String
  • b is Int

See Data.Lens.Getter and Data.Lens.Setter for functions and operators frequently used with lenses.

#Iso' Source

type Iso' s a = Iso 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.

#IndexedTraversal' Source

type IndexedTraversal' i s a = IndexedTraversal 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.

#IndexedSetter' Source

type IndexedSetter' i s a = IndexedSetter i s s a a

#IndexedSetter Source

type IndexedSetter i s t a b = IndexedOptic Function i s t a b

An indexed setter.

#IndexedOptic' Source

type IndexedOptic' p i s a = IndexedOptic p i s s a a

#IndexedOptic Source

type IndexedOptic p i s t a b = Indexed p i a b -> p s t

#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.

#IndexedGetter' Source

type IndexedGetter' i s a = IndexedGetter i s s a a

#IndexedGetter Source

type IndexedGetter i s t a b = IndexedFold a i s t a b

#IndexedFold' Source

type IndexedFold' r i s a = IndexedFold r i s s a a

#IndexedFold Source

type IndexedFold r i s t a b = IndexedOptic (Forget r) i s t a b

#Indexed Source

newtype Indexed p i s t

Constructors

Instances

#Grating Source

newtype Grating a b s t

Instances

#Grate' Source

type Grate' s a = Grate s s a a

#Grate Source

type Grate s t a b = forall p. Closed p => Optic p s t a b

A grate (http://r6research.livejournal.com/28050.html)

#Getter' Source

type Getter' s a = Getter s s a a

#Getter Source

type Getter s t a b = forall r. Fold r s t a b

#Forget Source

newtype Forget r a b

Constructors

Instances

#Fold' Source

type Fold' r s a = Fold r s s a a

#Fold Source

type Fold r s t a b = Optic (Forget r) s t a b

#Exchange Source

data Exchange a b s t

The Exchange profunctor characterizes an Iso.

Constructors

Instances

#AnIso' Source

type AnIso' s a = AnIso s s a a

#AnIso Source

type AnIso s t a b = Optic (Exchange a b) s t a b

#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

#AnAffineTraversal' Source

#AnAffineTraversal Source

type AnAffineTraversal s t a b = Optic (Stall a b) s t a b

#AffineTraversal' Source

#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).

#ATraversal' Source

type ATraversal' s a = ATraversal s s a a

#ATraversal Source

type ATraversal s t a b = Optic (Bazaar Function a b) s t a b

#APrism' Source

type APrism' s a = APrism s s a a

#APrism Source

type APrism s t a b = Optic (Market a b) s t a b

#ALens' Source

type ALens' s a = ALens s s a a

#ALens Source

type ALens s t a b = Optic (Shop a b) s t a b

#AGrate' Source

type AGrate' s a = AGrate s s a a

#AGrate Source

type AGrate s t a b = Optic (Grating a b) s t a b

#AGetter' Source

type AGetter' s a = AGetter s s a a

#AGetter Source

type AGetter s t a b = Fold a s t a b

#Wander Source

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