
Don Stewart wrote:
andrewcoppin:
If you were going to implement Tetris in Haskell, how would you do it?
(For that matter, has anybody already *done* it? It would probably make a nice example program...)
http://haskell.org/haskellwiki/Applications_and_libraries/Games
ASCII tetris http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/
OpenGL or Gtk2Hs seem the best options.
OK, well I'll have a go at seeing if I can put something together with Gtk2hs. (Nitpick: Don't you need Gtk2hs in order to *use* OpenGL? I mean, you have to open a window to render into somehow, and that's outside the OpenGL standard...)
2. How do you implement a program that is fundamentally about state mutation in a programming language which abhors state mutation?
Its not clear games are fundamentally about mutation, anymore than, say, window managers are. State we do with monads.
Hmm. On reflection, Tetris is probably a poor example of this. It has a fairly small, simple state that you can easily manipulate purely functionally. But if you imagine, say, an FPS game, where you have (possibly multiple) players running around, NPCs running after them, possibly a nontrivial physics engine, possibly a nontrivial AI system, possibly nontrivial scripted sequences happening... how do you *do* all that in Haskell?
Check the thesis on Frag for a pure approach, or just use StateT IO.
Indeed, Frag is interesting because it conclusively demonstrates that this can be done in Haskell (by doing it!) However, all the material I've read about it is unfortunately utterly incomprehensible. I still have no idea how it is possible to build such a highly interactive system in a language which strongly discourages interactivity...