
#15135: Overlapping typeclass instance selection depends on the optimisation level -------------------------------------+------------------------------------- Reporter: nicuveo | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.8.1 Component: Compiler | Version: 8.4.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by AntC): Replying to [comment:6 simonpj]: Thank you Simon for such a clear explanation. Oh dear! I see GHC has to do something like this under separate compilation. I'm not seeing why in a single module it doesn't at least inspect all instances in scope.
Sadly, ''any'' instance declaration can be overlapped; GHC gives no way
to say "this instance declaration cannot and must not be overlapped". This is terribly unsatisfactory, but at least we now understand what is going on. Then (?) we need a pragma for that, and it might need to be used in combo with other pragmas {-# OVERLAPPING, NOTOVERLAPPABLE #-}. Ugh! This'll get particularly ugh!ly if instances are in no substitution ordering. There's something to be said for statically validating all instances are in a strict substitution order. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15135#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler