Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type Setter s t a b = forall p. (Affine p, Traversing p, Mapping p) => Optic p s t a b
- type Setter' s a = Setter s s a a
- setter :: ((a -> b) -> s -> t) -> Setter s t a b
- closing :: (((s -> a) -> b) -> t) -> Setter s t a b
- type Resetter s t a b = forall p. (Coaffine p, Cotraversing p, Comapping p) => Optic p s t a b
- type Resetter' s a = Resetter s s a a
- resetter :: ((a -> t) -> s -> t) -> Resetter s t a t
- cod :: Profunctor p => Setter (p r a) (p r b) a b
- dom :: Profunctor p => Setter (p b r) (p a r) a b
- bound :: Monad m => Setter (m a) (m b) a (m b)
- fmapped :: Functor f => Setter (f a) (f b) a b
- contramapped :: Contravariant f => Setter (f b) (f a) a b
- liftedA :: Applicative f => Setter (f a) (f b) a b
- liftedM :: Monad m => Setter (m a) (m b) a b
- forwarded :: Setter (ReaderT r2 m a) (ReaderT r1 m a) r1 r2
- censored :: MonadWriter w m => Setter' (m a) w
- zipped :: Setter (u -> v -> a) (u -> v -> b) a b
- modded :: (a -> Bool) -> Setter' (a -> b) b
- cond :: (a -> Bool) -> Setter' a a
- set :: Optic (->) s t a b -> b -> s -> t
- over :: Optic (->) s t a b -> (a -> b) -> s -> t
- (.~) :: Optic (->) s t a b -> b -> s -> t
- (..~) :: Optic (->) s t a b -> (a -> b) -> s -> t
- (<>~) :: Semigroup a => Optic (->) s t a a -> a -> s -> t
- locally :: MonadReader s m => Optic (->) s s a b -> (a -> b) -> m r -> m r
- scribe :: MonadWriter w m => Monoid b => Optic (->) s w a b -> s -> m ()
- assigns :: MonadState s m => Optic (->) s s a b -> b -> m ()
- modifies :: MonadState s m => Optic (->) s s a b -> (a -> b) -> m ()
- (.=) :: MonadState s m => Optic (->) s s a b -> b -> m ()
- (..=) :: MonadState s m => Optic (->) s s a b -> (a -> b) -> m ()
- (<>=) :: MonadState s m => Semigroup a => Optic' (->) s a -> a -> m ()
Setter
type Setter s t a b = forall p. (Affine p, Traversing p, Mapping p) => Optic p s t a b Source #
\( \mathsf{Setter}\;S\;A = \exists F : \mathsf{Functor}, S \equiv F\,A \)
setter :: ((a -> b) -> s -> t) -> Setter s t a b Source #
To demote an optic to a semantic edit combinator, use the section (l ..~)
or over l
.
>>>
[("The",0),("quick",1),("brown",1),("fox",2)] & setter fmap . first' ..~ Prelude.length
[(3,0),(5,1),(5,1),(3,2)]
Caution: In order for the generated optic to be well-defined, you must ensure that the input function satisfies the following properties:
abst id ≡ id
abst f . abst g ≡ abst (f . g)
More generally, a profunctor optic must be monoidal as a natural transformation:
o id ≡ id
o (
Procompose
p q) ≡Procompose
(o p) (o q)
See Property
.
Resetter
type Resetter s t a b = forall p. (Coaffine p, Cotraversing p, Comapping p) => Optic p s t a b Source #
\( \mathsf{Setter}\;S\;A = \exists F : \mathsf{Functor}, F\,S \equiv A \)
Optics
cod :: Profunctor p => Setter (p r a) (p r b) a b Source #
Map covariantly over the output of a Profunctor
.
The most common profunctor to use this with is (->)
.
(dom ..~ f) g x ≡ f (g x) cod @(->) ≡withGrate
closed
closing
>>>
(cod ..~ show) length [1,2,3]
"3"
dom :: Profunctor p => Setter (p b r) (p a r) a b Source #
Map contravariantly over the input of a Profunctor
.
The most common profunctor to use this with is (->)
.
(dom ..~ f) g x ≡ g (f x)
>>>
(dom ..~ show) length [1,2,3]
7
bound :: Monad m => Setter (m a) (m b) a (m b) Source #
Setter
for monadically transforming a monadic value.
contramapped :: Contravariant f => Setter (f b) (f a) a b Source #
Setter
on each value of a contravariant functor.
contramap
≡over
contramapped
>>>
getPredicate (over contramapped (*2) (Predicate even)) 5
True
>>>
getOp (over contramapped (*5) (Op show)) 100
"500"
liftedA :: Applicative f => Setter (f a) (f b) a b Source #
censored :: MonadWriter w m => Setter' (m a) w Source #
TODO: Document
zipped :: Setter (u -> v -> a) (u -> v -> b) a b Source #
Setter
on the codomain of a zipping function.
>>>
((,) & zipped ..~ swap) 1 2
(2,1)
cond :: (a -> Bool) -> Setter' a a Source #
Apply a function only when the given condition holds.
See also predicated
& filtered
.
Operators
(.~) :: Optic (->) s t a b -> b -> s -> t infixr 4 Source #
Set all referenced fields to the given value.
(..~) :: Optic (->) s t a b -> (a -> b) -> s -> t infixr 4 Source #
Map over an optic.
>>>
Just 1 & just ..~ (+1)
Just 2
>>>
Nothing & just ..~ (+1)
Nothing
>>>
[1,2,3] & fmapped ..~ (*10)
[10,20,30]
>>>
(1,2) & first' ..~ (+1)
(2,2)
>>>
(10,20) & first' ..~ show
("10",20)
(<>~) :: Semigroup a => Optic (->) s t a a -> a -> s -> t infixr 4 Source #
Modify the target by adding another value.
>>>
both <>~ "!" $ ("bar","baz")
("bar!","baz!")
mtl
locally :: MonadReader s m => Optic (->) s s a b -> (a -> b) -> m r -> m r Source #
scribe :: MonadWriter w m => Monoid b => Optic (->) s w a b -> s -> m () Source #
Write to a fragment of a larger Writer
format.
assigns :: MonadState s m => Optic (->) s s a b -> b -> m () Source #
Replace the target(s) of a settable in a monadic state.
modifies :: MonadState s m => Optic (->) s s a b -> (a -> b) -> m () Source #
Map over the target(s) of a Setter
in a monadic state.
(.=) :: MonadState s m => Optic (->) s s a b -> b -> m () infix 4 Source #
Replace the target(s) of a settable in a monadic state.
This is an infixversion of assigns
.
>>>
execState (do first' .= 1; second' .= 2) (3,4)
(1,2)>>>
execState (both .= 3) (1,2)
(3,3)
(..=) :: MonadState s m => Optic (->) s s a b -> (a -> b) -> m () infix 4 Source #