Doc: http://www.erlang.org/doc/reference_manual/typespec.html
-type square() :: tuple(pos_integer(), pos_integer()).
-type side() :: 'white'|'black'.
-type movefun() :: fun((square(), square(), side()) -> tuple(square(), list(square()))).
-type movedef() :: tuple(atom(), movefun()).
-record(move, { piece,
start,