Yesterday I only barely got my four hours in — a reminder, I suppose, that even in the wake of my accomplishment, finishing larger projects will still be difficult for me. I’ll have to be more careful about starting to work a bit earlier in the day.
Once I did get started working, I think I got a reasonable amount done. I started by defining a type for the concrete game state (parameterized by the “phase” category I talked about yesterday), which should store everything that’s necessary to represent and evolve the game. After that I wrote a skeleton implementation of a handler for every command I defined in
Spec.idr. But while working on this, I realized that my types were looser than they needed to be.
I took a break to think about this and ended up storing in all
Phases the set of active mutators and their parameters. For now, this mostly lets me specify the menus more tightly: the
Reset command, for example, now states in the type that it resets all mutators to their default states, and the
SaveMenu command states that it does some validation checking and then either stays at the menu without changing anything or returns to the main menu with the new parameters in effect. All the other commands also state that they don’t change the set of active mutators.
Making the mutator state available to this set of rules also opens the way for a much more dramatic change later: I’ll be able to add to the
Playing phase parameters like the snake’s length and score, so that rules about how the snake grows can be encoded in types too!
Of course, with all this type fun, I’ve still done little work on the game’s implementation. I’ll have to pick up the pace soon.