[GHC] #6018: Injective type families
GHC
ghc-devs at haskell.org
Tue Oct 14 14:17:54 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 goldfire):
Replying to [comment:86 jstolarek]:
> I don't yet see how to deal with your `E2` example. It looks like we
would need to have pattern-exhaustiveness checking for type families. And
this would only be possible for closed kinds I think. Well, for open kinds
type family would simply be non-injective.
I don't know how to do this either. Luckily, we can reject `E2` on a first
pass. It's possible that the only examples like this are silly in the same
way that `E2` is silly, in that the last equation is utterly unreachable.
>
> I have a few more questions about implementation. These most likely go
to Simon. I've been trying to wrap my head around implementation of
`doTopReactFunEq` and I have these questions:
>
> 1. What does the term "react" mean? As in the name `doTopReact` and the
comment below its type signature: "The work item does not react with the
inert set..." (TcInteract, L1412).
>
> 2. What is "interaction"? As in the module name `TcInteract` or the
comment mentioned above: "... so try interaction with top-level
instances".
Simon may be able to answer better than I, but I believe these refer to
the actions taken in section 7 of the !OutsideIn paper.
>
> 3. What does `EvTerm` data type represent?
These are values of constraint types, including class dictionaries, type
equalities, and implicit parameters. `EvTerm`s are desugared in !DsBinds.
Write back if that's not enough of an explanation.
>
> 4. What are branches in axioms?
A closed type family with multiple equations leads to a so-called branched
axiom. The way overlap works in a closed type family means that we can't
have separate axioms for each equation. So, a branched axiom contains
potentially many branches; each branch asserts an equality, but later
branches can be used only when no previous branch supersedes. Does that
help? It's all in the closed type families paper.
>
> 5. I don't understand how canonicalization works. Is there an overview
somewhere? Other than `Note [Canonicalization]`, which unfortunately is
too vague for me :-(
I think this is also in !OutsideIn.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/6018#comment:87>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list