module Data.Lens.Light.State
( access
, (~=)
, (!=)
, (%=)
, (!%=)
)
where
import Control.Monad.State
import Data.Lens.Light.Core
access :: MonadState a m => Lens a b -> m b
access l = gets (getL l)
(~=) :: MonadState a m => Lens a b -> b -> m ()
l ~= b = modify $ setL l b
(!=) :: MonadState a m => Lens a b -> b -> m ()
l != b = modify' $ setL l $! b
infixr 4 ~=, !=
(%=) :: MonadState a m => Lens a b -> (b -> b) -> m ()
l %= f = modify $ modL l f
(!%=) :: MonadState a m => Lens a b -> (b -> b) -> m ()
l !%= f = modify' $ modL' l f
infixr 4 %=, !%=
modify' :: MonadState s m => (s -> s) -> m ()
modify' f = do
s <- get
put $! f s