[Haskell-cafe] Factoring into type classes