
#14440: Duplicate type family instances are permitted -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 8.2.1 checker) | Resolution: | Keywords: TypeFamilies 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 [ticket:14440 RyanGlScott]:
Is this intended?
I'm not sure if intended for identical type family instances, but it's certainly to be expected for partially overlapping type family instances. See examples in [https://downloads.haskell.org/~ghc/8.2.1/docs/html/users_guide/glasgow_exts.... #compatibility-and-apartness-of-type-family-equations User Guide].
My intuition screams "no", since if we offer //class// instance coherence, it seems like one ought to offer //type family// instance coherence as well.
The trouble with ''class'' instances is that we can't infer whether the rhs method expressions are equivalent in case of overlapping instance heads. Thus you can't have class instances with identical heads -- GHC doesn't try checking if the rhs's are identical. Contrariwise type family rhs's have a very simple structure, needing only alpha-renaming to determine if confluent.
At the same time, I can't think of any threat to type soundness imposed by this.
Quite. And that's the point in the papers that introduced type families circa 2008. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14440#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler