1-- | The 'State' effect.
3-- Represented as a pure value underneath, therefore:
5-- - thread local (if you need sharing, have a look at "Effectful.State.MVar"),
23import Effectful.Internal.Effect
24import Effectful.Internal.Monad
26-- | Provide access to a strict (WHNF), thread local, mutable state of type @s@.
27newtype State s :: Effect where
28 State :: s -> State s m r
30runState :: s -> Eff (State s : es) a -> Eff es (a, s)
32 (a, IdE (State s)) <- runEffect (IdE (State s0)) m
35evalState :: s -> Eff (State s : es) a -> Eff es a
36evalState s = evalEffect (IdE (State s))
38execState :: s -> Eff (State s : es) a -> Eff es s
40 IdE (State s) <- execEffect (IdE (State s0)) m
43get :: State s :> es => Eff es s
45 IdE (State s) <- getEffect
48gets :: State s :> es => (s -> a) -> Eff es a
51put :: State s :> es => s -> Eff es ()
52put s = putEffect (IdE (State s))
54state :: State s :> es => (s -> (a, s)) -> Eff es a
55state f = stateEffect $ \(IdE (State s0)) -> let (a, s) = f s0 in (a, IdE (State s))
57modify :: State s :> es => (s -> s) -> Eff es ()
58modify f = state (\s -> ((), f s))
60stateM :: State s :> es => (s -> Eff es (a, s)) -> Eff es a
61stateM f = stateEffectM $ \(IdE (State s0)) -> do
63 pure (a, IdE (State s))
65modifyM :: State s :> es => (s -> Eff es s) -> Eff es ()
66modifyM f = stateM (\s -> ((), ) <$> f s)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list