On Mon, Apr 30, 2007 at 11:16:47PM +0200, Denis Volk wrote: > Hello all, > > I am trying to make a (turn-based) game in Haskell and need to pass > around quite a bit of information, so using the State monad seems most > appropriate. My question is, which is a better idea: > > 1) Using State GameState r and then call execState for each game event > (i.e. user input) so I can do IO > 2) Using StateT GameState IO () and have the entire game live in one > big execStateT call. (I note XMonad does something similar.) > > There are difficulties with the first option, including keeping even > more state about what we're doing (for instance, are we in a menu?), > and adding stuff later would possibly require substantial rewrites. > Other than the fact that I would have IO in places where it perhaps > shouldn't be, the second option seems better, but I am new to all this > and it may be that I'm missing something.
You can also give some of your actions the type Monad m => StateT GameState m (), so that parametricity guarantees no actual IO will occur. Stefan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe