Types and Typeclasses - Learn You a Haskell for Great Good!