[GHC] #6018: Injective type families
GHC
ghc-devs at haskell.org
Fri Oct 10 13:43:14 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
Operating System: | Architecture: Unknown/Multiple
Unknown/Multiple | Difficulty: Unknown
Type of failure: | Blocked By:
None/Unknown | Related Tickets: #4259
Test Case: |
Blocking: |
Differential Revisions: Phab:D202 |
-------------------------------------+-------------------------------------
Comment (by simonpj):
* I think it's very straightforward to allow injectivity of form `r ->
<subset of args>`. That is, the rhs is unconstrained but the lhs must be
`r`.
* So injectivity isn't a binary property; rather it's a `Bool` per
argument. Making this list a field of `SynTyCon` is probably right, with
ordinary synonyms being all false.
* We are not (at least for now) changing System FC. So the only effect
of injectivity is to add extra "Derived" unification constraints, very
much like functional dependencies. If we see
{{{
[W] F t ~ F s
}}}
then we don't decopose it. Instead we add
{{{
[D] t ~ s
}}}
That guides inference, but does not produce proof terms. So, no,
nothing to do with `isDecomposableTyCon`. Much more like the
`try_improvement` code in `TcInteract.doTopReactFunEq`.
* I don't understand the discussion of `Map`. Are you perhaps discussing
how to verify some (not shown here) implementation of a closed type family
`Map` is in fact injective?
* Verifying injectivity for open families: if the RHSs unify then the
LHSs should be identical under that substitution. Eg
{{{
type instance F a Int = a -> Int
type instance F Int a = Int -> a
}}}
These are consistent (and hence allowed) and are injective in both
arguments.
* My brain is too small to think about verifying injectivity for closed
families. Richard?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/6018#comment:76>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list