The capability to accumulate. This can be seen in one of two ways:
A MonadState which can only append (using <>); or
A MonadWriter (limited to tell) with the ability to view the result of all previous tells.
Laws
accum should obey the following:
If you choose to define look and add instead, their definitions must obey the following:
If you want to define both, the relationship between them is as follows. These are also the default definitions.
Instances16MonadAccum, …
MonadAccum w m => MonadAccum w (MaybeT m)Defined in mtl-2.3.1 · Control.Monad.AccumThe accumulated value 'survives' an error: even if the computation fails to deliver a result, we still have an accumulated value.
Monoid w => MonadAccum w (AccumT w Identity)Defined in mtl-2.3.1 · Control.Monad.AccumMonadAccum w m => MonadAccum w (ExceptT e m)Defined in mtl-2.3.1 · Control.Monad.AccumThe accumulated value 'survives' an exception: even if the computation fails to deliver a result, we still have an accumulated value.
MonadAccum w m => MonadAccum w (IdentityT m)Defined in mtl-2.3.1 · Control.Monad.AccumMonadAccum w m => MonadAccum w (ReaderT r m)Defined in mtl-2.3.1 · Control.Monad.AccumMonadAccum w m => MonadAccum w (SelectT r m)Defined in mtl-2.3.1 · Control.Monad.AccumThe 'ranking' function gains the ability to accumulate
ws each time it is called. The final result will include the entire log of all such calls.MonadAccum w m => MonadAccum w (StateT s m)Defined in mtl-2.3.1 · Control.Monad.AccumMonadAccum w m => MonadAccum w (StateT s m)Defined in mtl-2.3.1 · Control.Monad.AccumMonadAccum w' m => MonadAccum w' (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Accum(MonadAccum w' m, Monoid w) => MonadAccum w' (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Accum(MonadAccum w' m, Monoid w) => MonadAccum w' (WriterT w m)Defined in mtl-2.3.1 · Control.Monad.Accum(MonadTrans t, Monad (t m), MonadAccum w m) => MonadAccum w (LiftingAccum t m)Defined in mtl-2.3.1 · Control.Monad.AccumMonadAccum w m => MonadAccum w (ContT r m)Defined in mtl-2.3.1 · Control.Monad.AccumThe continuation can see, and interact with, the accumulated value.
MonadAccum w' m => MonadAccum w' (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Accum(MonadAccum w' m, Monoid w) => MonadAccum w' (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Accum(MonadAccum w' m, Monoid w) => MonadAccum w' (RWST r w s m)Defined in mtl-2.3.1 · Control.Monad.Accum