[GHC] #8177: Roles for type families
GHC
ghc-devs at haskell.org
Thu May 15 02:29:03 UTC 2014
#8177: Roles for type families
-------------------------------------+------------------------------------
Reporter: simonpj | Owner: goldfire
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Changes (by goldfire):
* priority: high => normal
Comment:
Hmm... well, this just got a little more complicated. The full example
John just posted would not be solved by fixing this ticket. That's because
the data instance for `MVector` ''pattern-matches'' on `Int`. Currently in
GHC, it would be sound to have both the instance given and a separate
instance ending in `Age`, and have these instances be unrelated.
Accordingly, if the `MVector` were declared to have a representational
role for its last parameter, the instance given would be rejected for
pattern-matching on a representational parameter.
What it seems John wants is something new -- a data family that does
''representational'' matching, not nominal matching. Such a beast would
consider `data instance MVector s Int` and `data instance MVector s Age`
to overlap. Along similar lines, if a `MVector s Age` were requested, GHC
would serve up the instance for `MVector s Int`.
While I can imagine implementing such a feature (essentially by preventing
newtypes from appearing in instance declarations, much like how type
families can't appear in instance declarations today... and then
normalizing with respect to newtypes at usage sites), the ramifications of
the design are far from clear. In particular, what if the constructor of a
newtype is not available? It would also mean, for example, that if a
library exports a newtype `Foo` abstractly, a user wishing to have an
`MVector` instance for `Foo` would need to know `Foo`'s representation
type, something that the library author thought was hidden from users.
It's all a little murky.
So, I'm saying that John's use case does ''not'' qualify for this ticket,
and I'll un-bump its priority. John, if in light of my analysis (and if
you agree with it!) you still want this feature, create a new feature
request with the priority you feel is appropriate. This seems related but
quite separable to the features requested in this ticket.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8177#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list