[GHC] #14559: When overlapping instances lead to a compile error, show import chains for the instances

#14559: When overlapping instances lead to a compile error, show import chains for the instances -------------------------------------+------------------------------------- Reporter: Artyom.Kazak | Owner: (none) Type: feature | Status: new request | Priority: normal | Milestone: Component: Compiler | Version: 8.2.1 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Here's an example from work: {{{ • Overlapping instances for ToJSON BackupPhrase arising from a use of 'aesonRoundtripProp' Matching instances: instance ToJSON BackupPhrase -- Defined in 'Cardano.Wallet.Orphans.Aeson' instance ToJSON BackupPhrase -- Defined in 'Pos.Wallet.Aeson.ClientTypes' }}} Currently resolving such issues requires looking carefully at all imports and trying to guess which ones bring the instance into scope. It'd be quite helpful if the error was explicit about the import chain: {{{ • Overlapping instances for ToJSON BackupPhrase arising from a use of 'aesonRoundtripProp' Matching instances: instance ToJSON BackupPhrase -- Defined in 'Cardano.Wallet.Orphans.Aeson', -- imported by 'Cardano.Wallet.Orphans' instance ToJSON BackupPhrase -- Defined in 'Pos.Wallet.Aeson.ClientTypes', -- imported by 'Pos.Wallet.Web.Mode', -- and then by 'Cardano.Wallet.API.V1.Migration' }}} Thoughts? I'm worried about two things here: 1. Might these chains get too long? 2. Is it sufficiently obvious that “imported by `A` and then by `B`” means that you have imported `B` and `B` imported `A`, and not vice-versa? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14559 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC