Portability | non-portable |
---|---|

Stability | provisional |

Maintainer | Edward Kmett <ekmett@gmail.com> |

Safe Haskell | Trustworthy |

- type Review s t a b = forall p f. (Reviewable p, Settable f) => Overloaded p f s t a b
- type Review' t b = Review t t b b
- type AReview s t a b = Overloaded Reviewed Identity s t a b
- type AReview' t b = AReview t t b b
- unto :: (Reviewable p, Functor f) => (b -> t) -> Overloaded p f s t a b
- re :: AReview s t a b -> Getter b t
- review :: MonadReader b m => AReview s t a b -> m t
- reviews :: MonadReader b m => AReview s t a b -> (t -> r) -> m r
- reuse :: MonadState b m => AReview s t a b -> m t
- reuses :: MonadState b m => AReview s t a b -> (t -> r) -> m r
- (#) :: AReview s t a b -> b -> t
- class Profunctor p => Reviewable p where
- retagged :: p a b -> p s b

# Reviewing

type Review s t a b = forall p f. (Reviewable p, Settable f) => Overloaded p f s t a bSource

type AReview s t a b = Overloaded Reviewed Identity s t a bSource

unto :: (Reviewable p, Functor f) => (b -> t) -> Overloaded p f s t a bSource

re :: AReview s t a b -> Getter b tSource

Turn a `Prism`

or `Iso`

around to build a `Getter`

.

If you have an `Iso`

, `from`

is a more powerful version of this function
that will return an `Iso`

instead of a mere `Getter`

.

`>>>`

Left 5`5 ^.re _Left`

`>>>`

Left 7`6 ^.re (_Left.unto succ)`

`review`

≡`view`

`.`

`re`

`reviews`

≡`views`

`.`

`re`

`reuse`

≡`use`

`.`

`re`

`reuses`

≡`uses`

`.`

`re`

`re`

::`Prism`

s t a b ->`Getter`

b t`re`

::`Iso`

s t a b ->`Getter`

b t

review :: MonadReader b m => AReview s t a b -> m tSource

This can be used to turn an `Iso`

or `Prism`

around and `view`

a value (or the current environment) through it the other way.

`review`

≡`view`

`.`

`re`

`review`

.`unto`

≡`id`

`>>>`

Left "mustard"`review _Left "mustard"`

`>>>`

6`review (unto succ) 5`

Usually `review`

is used in the `(->)`

`Monad`

with a `Prism`

or `Iso`

, in which case it may be useful to think of
it as having one of these more restricted type signatures:

`review`

::`Iso'`

s a -> a -> s`review`

::`Prism'`

s a -> a -> s

However, when working with a `Monad`

transformer stack, it is sometimes useful to be able to `review`

the current environment, in which case one of
these more slightly more liberal type signatures may be beneficial to think of it as having:

`review`

::`MonadReader`

a m =>`Iso'`

s a -> m s`review`

::`MonadReader`

a m =>`Prism'`

s a -> m s

reviews :: MonadReader b m => AReview s t a b -> (t -> r) -> m rSource

This can be used to turn an `Iso`

or `Prism`

around and `view`

a value (or the current environment) through it the other way,
applying a function.

`reviews`

≡`views`

`.`

`re`

`reviews`

(`unto`

f) g ≡ g`.`

f

`>>>`

False`reviews _Left isRight "mustard"`

`>>>`

8`reviews (unto succ) (*2) 3`

Usually this function is used in the `(->)`

`Monad`

with a `Prism`

or `Iso`

, in which case it may be useful to think of
it as having one of these more restricted type signatures:

`reviews`

::`Iso'`

s a -> (s -> r) -> a -> r`reviews`

::`Prism'`

s a -> (s -> r) -> a -> r

However, when working with a `Monad`

transformer stack, it is sometimes useful to be able to `review`

the current environment, in which case one of
these more slightly more liberal type signatures may be beneficial to think of it as having:

`reviews`

::`MonadReader`

a m =>`Iso'`

s a -> (s -> r) -> m r`reviews`

::`MonadReader`

a m =>`Prism'`

s a -> (s -> r) -> m r

reuse :: MonadState b m => AReview s t a b -> m tSource

This can be used to turn an `Iso`

or `Prism`

around and `use`

a value (or the current environment) through it the other way.

`reuse`

≡`use`

`.`

`re`

`reuse`

`.`

`unto`

≡`gets`

`>>>`

Left 5`evalState (reuse _Left) 5`

`>>>`

6`evalState (reuse (unto succ)) 5`

`reuse`

::`MonadState`

a m =>`Prism'`

s a -> m s`reuse`

::`MonadState`

a m =>`Iso'`

s a -> m s

reuses :: MonadState b m => AReview s t a b -> (t -> r) -> m rSource

This can be used to turn an `Iso`

or `Prism`

around and `use`

the current state through it the other way,
applying a function.

`reuses`

≡`uses`

`.`

`re`

`reuses`

(`unto`

f) g ≡`gets`

(g`.`

f)

`>>>`

True`evalState (reuses _Left isLeft) (5 :: Int)`

`reuses`

::`MonadState`

a m =>`Prism'`

s a -> (s -> r) -> m r`reuses`

::`MonadState`

a m =>`Iso'`

s a -> (s -> r) -> m r

(#) :: AReview s t a b -> b -> tSource

An infix alias for `review`

.

`unto`

f '#' x ≡ f x l '#' x ≡ x`^.`

`re`

l

This is commonly used when using a `Prism`

as a smart constructor.

`>>>`

Left 4`_Left # 4`

But it can be used for any `Prism`

`>>>`

"7b"`base 16 # 123`

('#') ::`Iso'`

s a -> a -> s ('#') ::`Prism'`

s a -> a -> s ('#') ::`Review'`

s a -> a -> s ('#') ::`Equality'`

s a -> a -> s

# Reviewable Profunctors

class Profunctor p => Reviewable p whereSource

This provides a dual notion to that of `Gettable`

.