[GHC] #11348: Local open type families instances ignored during type checking
GHC
ghc-devs at haskell.org
Wed Jan 6 21:09:58 UTC 2016
#11348: Local open type families instances ignored during type checking
-------------------------------------+-------------------------------------
Reporter: alexvieth | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1-rc1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC rejects | Unknown/Multiple
valid program | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
Yes, exactly. That is ''much'' simpler than "meta-nodes", and had the
great merit of being correct (see third bullet).
I'm not too stressed about efficiency. You need only do this for the open
type-family instances, and there are seldom zillions of them. If you want
something a bit more efficient, try this:
* Start with a set of pairs `(fam-inst-decl, free-vars)`, where `free-
vars` is a list of ''locally-defined'' type/class constructors mentioned
anywhere in the instance. I'll call them the **gate vars** of the fam-
inst-decl.
* Typecheck any instances whose gate list is empty.
* Turn the set of pairs into a finite map as follows: for each pair `(fid,
g:gs)`, add `g -> (fid, gs)` to the finite map. Tis is the **gate map**.
* After typechecking a SCC of types/classes, take each one `T` in turn.
Look up `T` in the gate map. For each `(fid, gs)` that it maps to, if
`gs` is empty, that instance is ready to typecheck; if not, take one gate
from `gs`. If it already in the type env, drop it and take another from
`gs`. Once you find on active gate (i.e. not yet type-checked) and re-add
the depleted pair to the gate map as before.
That's it really. Essentially we cross off the gate vars one by one until
none are left.
You'd need to document this carefully.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11348#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list