optics-extra-0.2: Extra utilities and instances for optics-core

Safe HaskellNone
LanguageHaskell2010

Optics.State

Description

This module contains utilities for working with Setters in a MonadState context. If you prefer operator versions, you may wish to import Optics.State.Operators.

Synopsis

Documentation

modifying :: (Is k A_Setter, MonadState s m) => Optic k is s s a b -> (a -> b) -> m () Source #

Map over the target(s) of an Optic in our monadic state.

>>> execState (do modifying _1 (*10); modifying _2 $ stimes 5) (6,"o")
(60,"ooooo")
>>> execState (modifying each $ stimes 2) ("a","b")
("aa","bb")

modifying' :: (Is k A_Setter, MonadState s m) => Optic k is s s a b -> (a -> b) -> m () Source #

Version of modifying that is strict in both optic application and state modification.

>>> flip evalState ('a','b') $ modifying _1 (errorWithoutStackTrace "oops")
()
>>> flip evalState ('a','b') $ modifying' _1 (errorWithoutStackTrace "oops")
*** Exception: oops

assign :: (Is k A_Setter, MonadState s m) => Optic k is s s a b -> b -> m () Source #

Replace the target(s) of an Optic in our monadic state with a new value, irrespective of the old.

>>> execState (do assign _1 'c'; assign _2 'd') ('a','b')
('c','d')
>>> execState (assign each 'c') ('a','b')
('c','c')

assign' :: (Is k A_Setter, MonadState s m) => Optic k is s s a b -> b -> m () Source #

Version of assign that is strict in both optic application and state modification.

>>> flip evalState ('a','b') $ assign _1 (errorWithoutStackTrace "oops")
()
>>> flip evalState ('a','b') $ assign' _1 (errorWithoutStackTrace "oops")
*** Exception: oops

use :: (Is k A_Getter, MonadState s m) => Optic' k is s a -> m a Source #

Use the target of a Lens, Iso, or Getter in the current state.

>>> evalState (use _1) ('a','b')
'a'
>>> evalState (use _2) ("hello","world")
"world"

preuse :: (Is k An_AffineFold, MonadState s m) => Optic' k is s a -> m (Maybe a) Source #

Use the target of a AffineTraveral or AffineFold in the current state.

>>> evalState (preuse $ _1 % _Right) (Right 'a','b')
Just 'a'

Since: 0.2