Learning Haskell the hard way