
#9371: Overlapping type families, segafult ----------------------------------------+---------------------------------- Reporter: pingu | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.3 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: Differential Revisions: | ----------------------------------------+---------------------------------- Comment (by simonpj): "Fix the conflict checker" is clearly an option. It's what I described as "adding more complexity". Moreover, let us note that GHC's current behaviour is not documented in the user manual or in any paper. If you are arguing to stick with it, we should at least write it up! Any volunteers? Moreover, doesn't your example work perfectly well without eta reduction? To typecheck the `deriving instance` we need {{{ IdentityT [] Int ~R IdentityT MyList Int }}} Now, using the `Coercible` instances in Fig 2 of [http://research.microsoft.com/en- us/um/people/simonpj/papers/ext-f/coercible.pdf the paper], we can reduce that to {{{ [Int] ~R MyList Int }}} and that is true with the non-eta-reduced axiom. If `IdentityT`'s data constructor was not in scope, then indeed the program will still typecheck -- but arguably doing so exposes something about the representation of the newtype, harming abstraction. You certainly couldn't have written it be hand. It all seems quite debatable to me. Do we really want a significant cluster of complexity in the implementation, to implement an un-documented feature, which no one is asking for, and whose very existence is debatable? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9371#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler