Fix #16114 by adding a validity check to rnClsInstDecl
Commit 1c062b79 removed a validity check from rnLHsInstType
(which rejects some ill-formed instances like A => B => C
) under the rallying cry of simplifying code. While this commit had the best of intentions, it inadvertently made the error message for Eq a => Eq a => Eq (T a)
hopelessly confusing, as documented in #16114 (closed).
This partially reverts 1c062b79 by restoring that same validity check (but placing it in rnClsInstDecl
this time). Since rnLHsInstType
is currently just a thin wrapper around rnHsSigType
(and only has one call site), this patch also opts to just delete rnLHsInstType
entirely. Finally, this adds a test case for Eq a => Eq a => Eq (T a)
to ensure that this does not regress in the future.