Here‘s a thought: doesn’t
Generic
already have an unused phantom type that's only there “just in case we need to add something in the future”? How about using that to track whether an instance was derived or not, and enforce that withSafeHaskell
? YourSafeEq
can then use aGeneric Derived
constraint or whatever.