I haven't touched Haskell in a while, but it seems like this is solving the wrong problem. If you have a data type and a type class, there are 3 places you can make the type an instance of the typeclass:<p>1) Where you define the data type
2) Where you define the typeclass, or
3) Anywhere else<p>If you are in either 1 or 2, then you are the one who wrote either the type or the type class, and so probably know what you are doing. If the maintainer of the type and typeclass disagree on if they are compatible, that should probably be settled through concersation, not one side marking them as such in code.<p>If you are in situation 3, then just don't. Even if there is nothing inherently wrong with the tupe being an instance of the type class, an unrelated module defining it will cause nothing but problems. What if a different module had the same idea? What if one of the two original modules decide to add it?