http://haskell.cs.yale.edu/wp-content/uploads/2011/01/yampa-arcade.pdf