[Haskell-beginners] State monad question

Daniel Fischer daniel.is.fischer at web.de
Wed Jun 23 18:11:52 EDT 2010

On Wednesday 23 June 2010 23:48:42, Jordan Cooper wrote:
> Well, two things that I guess are important to mention:
> In my program, it's not Foo and Bar, but Cards and Players. Any player
> can potentially act on any card, even if it's not their own, thus I
> felt they probably shouldn't be part of the same state (though perhaps
> I am wrong in this).
> Secondly, as to why I wanted to use a monad here, importantFunction
> (which is called playerTurn in the real program) would contain a
> series of functions that would modify Cards and Players, not just one
> each as in my initial example. Thus it seems like I'd have to end up
> with let foo... let foo'... etc. which, from my reading in RWH, seems
> to be an acceptable use for a State monad.
> Thanks for your answer, and to Matthew for the encouragement :)

Maybe  a Monad transformer would be helpful, something along the lines of

StateT Player (State Card) foo

then you can work in the inner Monad (State Card) via lift.

fooBar = do
    cardResult <- lift cardAction
    playerResult <- playerAction cardResult
    return (cardResult, playerResult)

More information about the Beginners mailing list