[Haskell] How to avoid both duplicate instances and extraneous instance declarations?