[GHC] #13092: family instance consistency checks are too pessimistic
GHC
ghc-devs at haskell.org
Mon Jan 9 23:47:40 UTC 2017
#13092: family instance consistency checks are too pessimistic
-------------------------------------+-------------------------------------
Reporter: rwbarton | Owner: rwbarton
Type: bug | Status: new
Priority: normal | Milestone: 8.2.1
Component: Compiler | Version: 8.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Compile-time
Unknown/Multiple | performance bug
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
FamInst has this logic for checking type family instance consistency among
imports:
{{{
Note [Checking family instance consistency]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For any two family instance modules that we import directly or indirectly,
we
check whether the instances in the two modules are consistent, *unless* we
can
be certain that the instances of the two modules have already been checked
for
consistency during the compilation of modules that we import.
[...]
How do we know which pairs of modules have already been checked? Any pair
of
modules where both modules occur in the `HscTypes.dep_finsts' set (of the
`HscTypes.Dependencies') of one of our directly imported modules must have
already been checked. Everything else, we check now. (So that we can be
certain that the modules in our `HscTypes.dep_finsts' are consistent.)
}}}
However, suppose one of the modules `A` we import directly is itself a
type family instance module. Then it too has been checked for consistency
with its dependencies `B`, `C`, etc., so we should skip checking the pairs
`A` & `B`, `A` & `C`, etc.
The current behavior means that whenever we directly import a type family
instance module, we still have to load the interface files for all its
type family module dependencies, which largely defeats the purpose of the
optimization in this case.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13092>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list