Safe Haskell | None |
---|---|
Language | Haskell2010 |
- newtype ManyState m s a = ManyState {
- runManyState :: StateT s m a
- newtype ChangingState m st a = ChangingState {
- runChangingState :: At0 st -> m (a, At1 st)
- changingState :: (s -> m (a, t)) -> ChangingState m (s, t) a
Documentation
newtype ManyState m s a Source #
Given a ManyState that modifies Many a
, and another ManyState that modifes Many b
make a State that accepts Many (AppendUnique a b)
with the compile time constraint that all the types in (AppendUnique a b) are distinct.
ManyState | |
|
newtype ChangingState m st a Source #
Given a ChangingState that changes state from s
to t
,
and another ChangingState that changes state from t
to u
make a State that changes from s
to u
with the compile time constraint that all the types in (AppendUnique a b) are distinct.
NB. The state is in the snd position to be consistent with StateT.
ChangingState | |
|
Applicative m => PPointed * (ChangingState m) (s, s) Source # | |
Monad m => PApplicative * (ChangingState m) (s, t) (t, u) (s, u) Source # | |
Monad m => PMonad * (ChangingState m) (s, t) (t, u) (s, u) Source # | |
Functor m => Functor (ChangingState m st) Source # | |
Generic (ChangingState m st a) Source # | |
type PUnary * (ChangingState m) st Source # | |
type Rep (ChangingState m st a) Source # | |
changingState :: (s -> m (a, t)) -> ChangingState m (s, t) a Source #
Prefer this to using ChangingState to construct as it results in better type inference
as it avoids ambiguous type variable st