[Haskell-cafe] Nomic game in Haskell
dpiponi at gmail.com
Thu Apr 15 17:00:45 EDT 2010
> do you know Nomic?
> It's a fabulous and strange game where you have the right to change the rules in the middle of the game!
I know nomic, but as has been pointed out, it's too wide-ranging to be
captured in Haskell. So how about a game played in the Haskell type
system where you get to play whatever type you like?
Let's restrict ourselves to a total fragment of Haskell. Only allow
structural recursion and that sort of thing.
The 'board' is a Haskell type function. It'll look something like this:
type Board a b c ... y z = ...
with type variables a to z (no need to have precisely 26) and so that
the right hand side is a type, not another type function.
(A neutral third party will have to implement Board.)
There are two players. They take turns where a turn consists of
picking a concrete type to bind to precisely one previously unbound
type variable. When there are no more legal moves left, player 1 now
has to exhibit an element of the resulting type. If they succeed, they
win, otherwise player 2 wins. Void is allowed.
For example, consider
type Board a b c d e f g = (Either a b, Either c d, Either e f, g)
Player 1 must start by making g a type they know how to instantiate.
Maybe g=Int. If not, then Player 2 chooses g=Void and they will never
be able to make one of these 4-tuples. From now on, Player 2 has sente
(to use go language) because Player 1 will always have to play in the
same factor of the 4-tuple that Player 2 played in. Ultimately,
however, Player 1 can force a win.
More information about the Haskell-Cafe