[Haskell-beginners] How to manage typeclass hierarchies and instances?