Proposal: add 'state' to the MonadState class
Twan van Laarhoven
twanvl at gmail.com
Mon Sep 26 16:25:44 CEST 2011
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
or as a stand alone function like modify. I personally prefer to add it
to the class, since that allows for a more efficient implementation. In
particular:
instance Monad m => MonadState s (StateT s m) where
....
state = StateT (return . f)
Discussion period: 2 weeks (ends October 10th)
Twan
More information about the Libraries
mailing list