Make "Game.isOver" pointfree
Make "Board.rotate" public
Add basic "Direction" type
Add move function to Board
Add rotateTo function to Board

Also implement move in terms of it.
Change the behavior of Vector.canShift

Previously I considered empty vectors to be shiftable. That turned out
to be incorrect. Consider a board like this:

    1 -
    - -

You can't shift the first row because the number doesn't have anywhere
to go. You can't shift the second row, either. The game will bark at you
if you try.

Also I noticed a lapse in my tests that incorrectly marked "- - 1 -" as
un-shiftable. That has been fixed.
Add canMove function to Board
Add quality function to Game
Move isOver from Game to Board
Import constructors instead of qualified