
#12881: GHC 8.0.2 regression involving OVERLAP annotations -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: Type: bug | Status: new Priority: high | Milestone: 8.0.2 Component: Compiler | Version: 8.0.2-rc1 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 RyanGlScott): So it looks like what is going on here is that in GHC 8.0.1 and before, there was different code generated under the hood for default class method implementations. This code happened to work irrespective of whether any overlapping instances were marked with `OVERLAPPING` or not. That's not to say that leaving off `OVERLAPPING` pragmas couldn't have caused problems down the road in GHC 8.0.1, but in the particular case of default method implementations, it luckily didn't matter. In GHC 8.0.2, however (after https://ghc.haskell.org/trac/ghc/changeset/d2958bd08a049b61941f078e51809c7e6...), GHC switched to using visible type application to implement default class method implementations. This now poses an issue for any overlapping instances with default method implementations, because in the code that gets generated now, e.g., {{{#!hs instance Arbitrary Int where shrink = dmshrink @Int }}} `dmshrink @Int` is forced to choose a particular `Arbitrary` instance, and without the `OVERLAPPING` annotation, GHC can't decide between the `Arbitrary a` instance and the `Arbitrary Int` instance. So on one hand, there is a somewhat good reason why this code now fails to typecheck. On the other hand, it's quite annoying—a nontrivial number of packages in the wild now fail to build with GHC 8.0.2, and there are probably more examples outside of Stackage that I haven't found. I'm not sure how to address this. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12881#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler