• Ryan Scott's avatar
    Make error when deriving an instance for a typeclass less misleading · d5a4e49d
    Ryan Scott authored
    Before, when you attempted to derive an instance for a typeclass,
    class C1 (a :: Constraint) where
    class C2 where
    deriving instance C1 C2
    GHC would complain that `C2`'s data constructors aren't in scope. But
    makes no sense, since typeclasses don't have constructors! By refining
    checks that GHC performs when deriving, we can make the error message a
    little more sensible.
    This also cleans up a related `DeriveAnyClass` infelicity. Before, you
    wouldn't have been able to compile code like this:
    import System.IO (Handle)
    class C a
    deriving instance C Handle
    Since GHC was requiring that all data constructors of `Handle` be in
    scope. But `DeriveAnyClass` doesn't even generate code that mentions
    any data constructors, so this requirement is silly!
    Fixes #11509.
    Test Plan: make test TEST=T11509
    Reviewers: simonpj, austin, bgamari
    Reviewed By: simonpj, bgamari
    Subscribers: thomie, simonpj
    Differential Revision: https://phabricator.haskell.org/D2558
    GHC Trac Issues: #11509
T11509_1.stderr 350 Bytes