[GHC] #6018: Injective type families
GHC
ghc-devs at haskell.org
Wed Jul 16 18:45:21 UTC 2014
#6018: Injective type families
-------------------------------------+-------------------------------------
Reporter: lunaris | Owner: jstolarek
Type: feature | Status: new
request | Milestone: 7.10.1
Priority: normal | Version: 7.4.1
Component: Compiler | Keywords: TypeFamilies,
Resolution: | Injective
Differential Revisions: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple | Test Case:
Difficulty: Unknown | Blocking:
Blocked By: |
Related Tickets: #4259 |
-------------------------------------+-------------------------------------
Comment (by goldfire):
I'm still not sold on the concrete syntax involving `result`, despite
having introduced that idea myself. I like the `(**)` suggestion here a
bit more: http://www.haskell.org/pipermail/ghc-devs/2014-July/005492.html
Separately, a change to Core will be necessary to really make this work in
all cases.
{{{
data X a where
MkX :: (F b c ~ a) => b -> c -> X a
}}}
Say `F` is injective (in both arguments). After pattern-matching on `MkX
... :: X (F Int Bool)`, we will probably want to discover that `b` is
`Int` and `c` is `Bool`. To do so, we will need to decompose the `(F b c
~ a)` coercion, using the '''left''' and '''right''' (or perhaps
'''nth''') coercion forms. These currently don't work over type families,
and for good reason. However, if a type family is injective, then these
''could'' be made to work over type families. With the update to Core, we
would probably want to make sure we don't lose type safety, though!
All that said, this use case is obscure, and the primary push for
injective type families does not seem to require a change to Core. It is
worth implementing without this piece. But, the idea came up in
conversation, and I thought I should record it.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/6018#comment:40>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list