[GHC] #9805: Use TrieMaps to speed up type class instance lookup
GHC
ghc-devs at haskell.org
Fri Jan 30 22:46:30 UTC 2015
#9805: Use TrieMaps to speed up type class instance lookup
-------------------------------------+-------------------------------------
Reporter: ezyang | Owner: ezyang
Type: task | Status: new
Priority: normal | Milestone:
Component: Compiler (Type | Version: 7.9
checker) | Keywords:
Resolution: | Architecture:
Operating System: Unknown/Multiple | Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by ezyang):
So, here is an irritating problem with trying to deBruijn number template
variables on the fly.
First, let's establish that it is desirable for template variables to be
deBruijn numbered in order of appearance. This is because if you have
instanc heads `C a b` and `C b a` (`a` and `b` being template variable),
it would be rather silly if we de Bruijinized these as `C 0 1` and `C 1
0`, when really they're the same. We don't know, a priori, what order the
"template quantifiers" should be, so it would be great to defer this
choice until we've explored the expression deeply enough to tell.
The fly in the ointment is this: with template variables, environment
extension happens when we ''encounter a template variable'' (as opposed to
de Bruijn numbering lambda/foralls, where extension occurs when we
''encounter a lambda/forall''). So, if I am handling `C ????? a` (where
`a` is a template variable), I do not know what the index of `a` will be
until I have processed `?????` and determined how many template variables
show up for the first time there. Accordingly, my lookup function must
''return'' the new template variable environment, in the same way the
unifying match function returns the substitution.
This is not completely terrible, since we already were going to need to
return extra information on lookup for the unifying match, but it does
mean we can't use any of the existing lookup/insert functions to manage
template variables. C'est la vie?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9805#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list