layered-state-1.1.3: Control structure similar to Control.Monad.State, allowing multiple nested states, distinguishable by provided phantom types.

Safe HaskellNone
LanguageHaskell2010

Control.Monad.State.Layered

Documentation

type M = Monad Source #

newtype StateT s m a Source #

Constructors

StateT (StateT s m a) 

Instances

(Setter k l m, TransStateData k l (StateT s) m) => Setter__ k False l (StateT s m) Source # 

Methods

put__ :: InferStateData False (StateT s m) m -> m () Source #

(M m, (~) Type (InferStateData k l (StateT s m)) s) => Setter__ k True l (StateT s m) Source # 

Methods

put__ :: InferStateData True (StateT s m) m -> m () Source #

(Getter k l m, TransStateData k l (StateT s) m) => Getter__ k False l (StateT s m) Source # 

Methods

get__ :: m (InferStateData False (StateT s m) m) Source #

(M m, (~) Type (InferStateData k l (StateT s m)) s) => Getter__ k True l (StateT s m) Source # 

Methods

get__ :: m (InferStateData True (StateT s m) m) Source #

Setter Type l m => Setter Type l (StateT s m) Source # 

Methods

put :: InferStateData l (StateT s m) m -> m () Source #

M m => Setter Type l (StateT l m) Source # 

Methods

put :: InferStateData l (StateT l m) m -> m () Source #

(M m, Setter__ k ok l (StateT s m), (~) Bool ok (MatchedBases k * l s)) => Setter k l (StateT s m) Source # 

Methods

put :: InferStateData l (StateT s m) m -> m () Source #

Getter Type l m => Getter Type l (StateT s m) Source # 

Methods

get :: m (InferStateData l (StateT s m) m) Source #

M m => Getter Type l (StateT l m) Source # 

Methods

get :: m (InferStateData l (StateT l m) m) Source #

(M m, Getter__ k ok l (StateT s m), (~) Bool ok (MatchedBases k * l s)) => Getter k l (StateT s m) Source # 

Methods

get :: m (InferStateData l (StateT s m) m) Source #

MonadTrans (StateT s) Source # 

Methods

lift :: Monad m => m a -> StateT s m a #

Monad m => Monad (StateT s m) Source # 

Methods

(>>=) :: StateT s m a -> (a -> StateT s m b) -> StateT s m b #

(>>) :: StateT s m a -> StateT s m b -> StateT s m b #

return :: a -> StateT s m a #

fail :: String -> StateT s m a #

Functor m => Functor (StateT s m) Source # 

Methods

fmap :: (a -> b) -> StateT s m a -> StateT s m b #

(<$) :: a -> StateT s m b -> StateT s m a #

MonadFix m => MonadFix (StateT s m) Source # 

Methods

mfix :: (a -> StateT s m a) -> StateT s m a #

MonadFail m => MonadFail (StateT s m) Source # 

Methods

fail :: String -> StateT s m a #

Monad m => Applicative (StateT s m) Source # 

Methods

pure :: a -> StateT s m a #

(<*>) :: StateT s m (a -> b) -> StateT s m a -> StateT s m b #

liftA2 :: (a -> b -> c) -> StateT s m a -> StateT s m b -> StateT s m c #

(*>) :: StateT s m a -> StateT s m b -> StateT s m b #

(<*) :: StateT s m a -> StateT s m b -> StateT s m a #

MonadPlus m => Alternative (StateT s m) Source # 

Methods

empty :: StateT s m a #

(<|>) :: StateT s m a -> StateT s m a -> StateT s m a #

some :: StateT s m a -> StateT s m [a] #

many :: StateT s m a -> StateT s m [a] #

MonadPlus m => MonadPlus (StateT s m) Source # 

Methods

mzero :: StateT s m a #

mplus :: StateT s m a -> StateT s m a -> StateT s m a #

MonadIO m => MonadIO (StateT s m) Source # 

Methods

liftIO :: IO a -> StateT s m a #

MonadThrow m => MonadThrow (StateT s m) Source # 

Methods

throwM :: Exception e => e -> StateT s m a #

MonadBranch m => MonadBranch (StateT s m) Source # 

Methods

branched :: StateT s m a -> StateT s m a #

PrimMonad m => PrimMonad (StateT s m) Source # 

Associated Types

type PrimState (StateT s m :: * -> *) :: * #

Methods

primitive :: (State# (PrimState (StateT s m)) -> (#TupleRep [RuntimeRep], LiftedRep, State# (PrimState (StateT s m)), a#)) -> StateT s m a #

Wrapped (StateT s m a) Source # 

Associated Types

type Unwrapped (StateT s m a) :: * #

Methods

_Wrapped' :: Iso' (StateT s m a) (Unwrapped (StateT s m a)) #

(~) * (StateT s1 m1 a1) t => Rewrapped (StateT s2 m2 a2) t Source # 
type PrimState (StateT s m) Source # 
type PrimState (StateT s m) = PrimState m
type Unwrapped (StateT s m a) Source # 
type Unwrapped (StateT s m a) = StateT s m a

type family StatesT ss m where ... Source #

Equations

StatesT '[] m = m 
StatesT (s ': ss) m = StateT s (StatesT ss m) 

type InferStateData (l :: k) m = InferStateData' k l m Source #

type family InferStateData' k (l :: k) m where ... Source #

Equations

InferStateData' Type l m = l 
InferStateData' k l m = StateData l m 

type family StateData l m where ... Source #

Equations

StateData l (StateT s m) = If (MatchedBases l s) s (StateData l m) 
StateData l (t m) = StateData l m 

type family MatchedBases (a :: ka) (b :: kb) :: Bool where ... Source #

Equations

MatchedBases (a :: k) (b :: k) = a == b 
MatchedBases (a :: k) (b t :: l) = MatchedBases a b 
MatchedBases (a :: k) (b :: l) = False 

type Monad l m = (Getter l m, Setter l m) Source #

class M m => Getter l m where Source #

Minimal complete definition

get

Methods

get :: m (InferStateData l m) Source #

Instances

(M (t m), MonadTrans t, Getter k l m, TransStateData k l t m) => Getter k l (t m) Source # 

Methods

get :: m (InferStateData l (t m) m) Source #

Getter Type l m => Getter Type l (StateT s m) Source # 

Methods

get :: m (InferStateData l (StateT s m) m) Source #

M m => Getter Type l (StateT l m) Source # 

Methods

get :: m (InferStateData l (StateT l m) m) Source #

(M m, Getter__ k ok l (StateT s m), (~) Bool ok (MatchedBases k * l s)) => Getter k l (StateT s m) Source # 

Methods

get :: m (InferStateData l (StateT s m) m) Source #

class M m => Setter l m where Source #

Minimal complete definition

put

Methods

put :: InferStateData l m -> m () Source #

Instances

(M (t m), MonadTrans t, Setter k l m, TransStateData k l t m) => Setter k l (t m) Source # 

Methods

put :: InferStateData l (t m) m -> m () Source #

Setter Type l m => Setter Type l (StateT s m) Source # 

Methods

put :: InferStateData l (StateT s m) m -> m () Source #

M m => Setter Type l (StateT l m) Source # 

Methods

put :: InferStateData l (StateT l m) m -> m () Source #

(M m, Setter__ k ok l (StateT s m), (~) Bool ok (MatchedBases k * l s)) => Setter k l (StateT s m) Source # 

Methods

put :: InferStateData l (StateT s m) m -> m () Source #

class M m => Getter__ (ok :: Bool) l m where Source #

Minimal complete definition

get__

Methods

get__ :: m (InferStateData l m) Source #

Instances

(Getter k l m, TransStateData k l (StateT s) m) => Getter__ k False l (StateT s m) Source # 

Methods

get__ :: m (InferStateData False (StateT s m) m) Source #

(M m, (~) Type (InferStateData k l (StateT s m)) s) => Getter__ k True l (StateT s m) Source # 

Methods

get__ :: m (InferStateData True (StateT s m) m) Source #

class M m => Setter__ (ok :: Bool) l m where Source #

Minimal complete definition

put__

Methods

put__ :: InferStateData l m -> m () Source #

Instances

(Setter k l m, TransStateData k l (StateT s) m) => Setter__ k False l (StateT s m) Source # 

Methods

put__ :: InferStateData False (StateT s m) m -> m () Source #

(M m, (~) Type (InferStateData k l (StateT s m)) s) => Setter__ k True l (StateT s m) Source # 

Methods

put__ :: InferStateData True (StateT s m) m -> m () Source #

type MonadStates ss m = (Getters ss m, Setters ss m) Source #

type Getters ss m = Monads__ Getter ss m Source #

type Setters ss m = Monads__ Setter ss m Source #

type family Monads__ p ss m :: Constraint where ... Source #

Equations

Monads__ p (s ': ss) m = (p s m, Monads__ p ss m) 
Monads__ p '[] m = () 

gets :: forall l m s a. (Getter l m, s ~ InferStateData l m) => Lens' s a -> m a Source #

type family TopStateData m where ... Source #

Equations

TopStateData (StateT s m) = s 
TopStateData (t m) = TopStateData m 

type Monad' m = (Getter' m, Setter' m) Source #

get' :: forall m. Getter' m => m (TopStateData m) Source #

put' :: forall m. Setter' m => TopStateData m -> m () Source #

gets' :: forall m s a. (Getter' m, s ~ TopStateData m) => Lens' s a -> m a Source #

stateT :: (s -> m (a, s)) -> StateT s m a Source #

runT :: forall s m a. StateT s m a -> s -> m (a, s) Source #

evalT :: forall s m a. Monad m => StateT s m a -> s -> m a Source #

execT :: forall s m a. Monad m => StateT s m a -> s -> m s Source #

runDefT :: forall s m a. Default s => StateT s m a -> m (a, s) Source #

evalDefT :: forall s m a. (Monad m, Default s) => StateT s m a -> m a Source #

execDefT :: forall s m a. (Monad m, Default s) => StateT s m a -> m s Source #

run :: forall s a. State s a -> s -> (a, s) Source #

eval :: forall s a. State s a -> s -> a Source #

exec :: forall s a. State s a -> s -> s Source #

runDef :: forall s a. Default s => State s a -> (a, s) Source #

evalDef :: forall s a. Default s => State s a -> a Source #

execDef :: forall s a. Default s => State s a -> s Source #

type InferMonadState s l m = (Monad l m, s ~ InferStateData l m) Source #

modifyM :: forall l s m a. InferMonadState s l m => (s -> m (a, s)) -> m a Source #

modifyM_ :: forall l s m a. InferMonadState s l m => (s -> m s) -> m () Source #

modify :: forall l s m a. InferMonadState s l m => (s -> (a, s)) -> m a Source #

modify_ :: forall l s m a. InferMonadState s l m => (s -> s) -> m () Source #

sub :: forall l s m a. InferMonadState s l m => m a -> m a Source #

with :: forall l s m a. InferMonadState s l m => s -> m a -> m a Source #

withModified :: forall l s m a. InferMonadState s l m => (s -> s) -> m a -> m a Source #

withModifiedM :: forall l s m a. InferMonadState s l m => (s -> m s) -> m a -> m a Source #

type TopMonadState s m = (Monad' m, s ~ TopStateData m) Source #

modifyM' :: forall s m a. TopMonadState s m => (s -> m (a, s)) -> m a Source #

modifyM'_ :: forall s m a. TopMonadState s m => (s -> m s) -> m () Source #

modify' :: forall s m a. TopMonadState s m => (s -> (a, s)) -> m a Source #

modify'_ :: forall s m a. TopMonadState s m => (s -> s) -> m () Source #

sub' :: forall s m a. TopMonadState s m => m a -> m a Source #

with' :: forall s m a. TopMonadState s m => s -> m a -> m a Source #

withModified' :: forall s m a. TopMonadState s m => (s -> s) -> m a -> m a Source #

withModifiedM' :: forall s m a. TopMonadState s m => (s -> m s) -> m a -> m a Source #

mapT :: (m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b Source #