-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Phantom State Transformer. Like State Monad, but without values. -- -- A monad transformer that mimics the State Monad Transformer from the -- transformers package, but dropping the values. In those cases -- that you want to use the State Monad but you only care about effects -- and how the state changes, use this library to earn a plus of -- efficiency. @package phantom-state @version 0.2.1.2 -- | Phantom State Transformer type and functions. module Control.Applicative.PhantomState -- | The Phantom State Transformer is like the State Monad Transformer, but -- it does not hold any value. Therefore, it automatically discards the -- result of any computation. Only changes in the state and effects will -- remain. This transformer produces a new Applicative functor -- from any Monad. The primitive operations in this functor are: -- -- -- -- Although useState and changeState are defined in terms -- of useAndChangeState: -- --
--      useState f = useAndChangeState (\s -> f s *> pure s)
--   changeState f = useAndChangeState (pure . f)
--   
-- -- So useAndChangeState is the only actual primitive. -- -- Use runPhantomStateT (or runPhantomState) to get the -- result of a phantom state computation. data PhantomStateT s m a -- | Type synonym of PhantomStateT where the underlying Monad -- is the Identity monad. type PhantomState s = PhantomStateT s Identity -- | Perform an applicative action using the current state, leaving the -- state unchanged. The result will be discarded, so only the effect will -- remain. useState :: Applicative m => (s -> m a) -> PhantomStateT s m () -- | Modify the state using a pure function. No effect will be produced, -- only the state will be modified. changeState :: Applicative m => (s -> s) -> PhantomStateT s m () -- | Combination of useState and changeState. It allows you -- to change the state while performing any effects. The new state will -- be the result of applying the argument function to the old state. The -- following equations hold: -- --
--      useState f *> changeState g }
--                                  } = useAndChangeState (\s -> f s *> g s)
--   changeState g *>    useState f }
--   
useAndChangeState :: (s -> m s) -> PhantomStateT s m () -- | Perform a phantom state computation by setting an initial state and -- running all the actions from there. runPhantomStateT :: PhantomStateT s m a -> s -> m s -- | Specialized version of runPhantomStateT where the underlying -- Monad is the Identity monad. runPhantomState :: PhantomState s a -> s -> s instance GHC.Base.Functor (Control.Applicative.PhantomState.PhantomStateT s m) instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Applicative.PhantomState.PhantomStateT s m) instance (GHC.Base.Monad m, GHC.Base.Alternative m) => GHC.Base.Alternative (Control.Applicative.PhantomState.PhantomStateT s m)