{-# LANGUAGE TypeOperators #-}
module Data.Label.Monadic
(
gets
, puts
, modify
, modifyAndGet
, (=:)
, (=.)
, asks
, local
)
where
import Control.Monad
import Data.Label.Mono (Lens)
import qualified Data.Label.Total as Total
import qualified Control.Monad.Reader as Reader
import qualified Control.Monad.State as State
gets :: State.MonadState f m => Lens (->) f o -> m o
gets :: forall f (m :: * -> *) o. MonadState f m => Lens (->) f o -> m o
gets = forall s (m :: * -> *) a. MonadState s m => (s -> a) -> m a
State.gets forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall f g o i. ((f -> g) :-> (o -> i)) -> f -> o
Total.get
puts :: State.MonadState f m => Lens (->) f o -> o -> m ()
puts :: forall f (m :: * -> *) o.
MonadState f m =>
Lens (->) f o -> o -> m ()
puts Lens (->) f o
l = forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
State.modify forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall f g o i. ((f -> g) :-> (o -> i)) -> i -> f -> g
Total.set Lens (->) f o
l
modify :: State.MonadState f m => Lens (->) f o -> (o -> o) -> m ()
modify :: forall f (m :: * -> *) o.
MonadState f m =>
Lens (->) f o -> (o -> o) -> m ()
modify Lens (->) f o
l = forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
State.modify forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall f g o i. ((f -> g) :-> (o -> i)) -> (o -> i) -> f -> g
Total.modify Lens (->) f o
l
infixr 2 =:
(=:) :: State.MonadState f m => Lens (->) f o -> o -> m ()
=: :: forall f (m :: * -> *) o.
MonadState f m =>
Lens (->) f o -> o -> m ()
(=:) = forall f (m :: * -> *) o.
MonadState f m =>
Lens (->) f o -> o -> m ()
puts
infixr 2 =.
(=.) :: State.MonadState f m => Lens (->) f o -> (o -> o) -> m ()
=. :: forall f (m :: * -> *) o.
MonadState f m =>
Lens (->) f o -> (o -> o) -> m ()
(=.) = forall f (m :: * -> *) o.
MonadState f m =>
Lens (->) f o -> (o -> o) -> m ()
modify
asks :: Reader.MonadReader f m => (Lens (->) f o) -> m o
asks :: forall f (m :: * -> *) o. MonadReader f m => Lens (->) f o -> m o
asks = forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Reader.asks forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall f g o i. ((f -> g) :-> (o -> i)) -> f -> o
Total.get
local :: Reader.MonadReader f m => (Lens (->) f o) -> (o -> o) -> m a -> m a
local :: forall f (m :: * -> *) o a.
MonadReader f m =>
Lens (->) f o -> (o -> o) -> m a -> m a
local Lens (->) f o
l o -> o
f = forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Reader.local (forall f g o i. ((f -> g) :-> (o -> i)) -> (o -> i) -> f -> g
Total.modify Lens (->) f o
l o -> o
f)
modifyAndGet :: State.MonadState f m => (Lens (->) f o) -> (o -> (a, o)) -> m a
modifyAndGet :: forall f (m :: * -> *) o a.
MonadState f m =>
Lens (->) f o -> (o -> (a, o)) -> m a
modifyAndGet Lens (->) f o
l o -> (a, o)
f =
do (a
b, o
a) <- o -> (a, o)
f forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
`liftM` forall f (m :: * -> *) o. MonadState f m => Lens (->) f o -> m o
gets Lens (->) f o
l
forall f (m :: * -> *) o.
MonadState f m =>
Lens (->) f o -> o -> m ()
puts Lens (->) f o
l o
a
forall (m :: * -> *) a. Monad m => a -> m a
return a
b