2048 clone in Haskell with a free monad transformer