Proposal: add 'state' to the MonadState class
ekmett at gmail.com
Mon Sep 26 16:50:29 CEST 2011
On Mon, Sep 26, 2011 at 10:41 AM, Antoine Latter <aslatter at gmail.com> wrote:
> On Mon, Sep 26, 2011 at 9:25 AM, Twan van Laarhoven <twanvl at gmail.com>
> > Hello list,
> > Currently the 'state' function is only defined for the State type (aka
> > StateT Identity):
> > state :: (s -> (a, s)) -> State s a
> > state f = StateT (Identity . f)
> > But this function makes sense for all MonadState instances. I therefore
> > propose to either add it to the MonadState class:
> > class MonadState s m | m -> s where
> > ...
> > state :: (s -> (a,s)) -> m a
> > state f = do s <- get
> > let (a,s') = f s
> > set s'
> > return a
I am 100% behind this change.
It has been on the short list of changes that I want to make to mtl.
The main reason that I like it aside from the fact that it witnesses the
canonical monad homomorphism from State is that it yields more efficient
definitions for functions like modify, and the often-needed but needlessly
expensive operations where you bump a counter _and_ want the result for
something like a fresh variable supply.
I would like to encourage further public discussion.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Libraries