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,
target,
movetype }).
-type moverec() :: #move{}.
-record(piece, { type=pawn,
team=white,
history=[],
movefun=pawnmove,
capturefun=pawncap }).
-type piece() :: #piece{}.
-record(historyitem, { endsquare,
traversed=[] }).
-type historyitem() :: #historyitem{}.
-record(boardstate, { pieces,
whiteking={5, 1},
blackking={5, 8} }).
-type boardstate() :: #boardstate{}.