module Data.Record.Label.Monadic
(
getM, setM, modM, (=:)
, askM, localM
)
where
import Control.Monad.State
import Control.Monad.Reader
import Data.Record.Label.Core
getM :: MonadState s m => s :-> b -> m b
getM = gets . getL
setM :: MonadState s m => s :-> b -> b -> m ()
setM l = modify . setL l
infixr 7 =:
(=:) :: MonadState s m => s :-> b -> b -> m ()
(=:) = setM
modM :: MonadState s m => s :-> b -> (b -> b) -> m ()
modM l = modify . modL l
askM :: MonadReader r m => (r :-> b) -> m b
askM = asks . getL
localM :: MonadReader r m => (r :-> b) -> (b -> b) -> m a -> m a
localM l f = local (modL l f)