diff options
author | simonpj@microsoft.com <unknown> | 2011-02-17 14:09:21 +0000 |
---|---|---|
committer | simonpj@microsoft.com <unknown> | 2011-02-17 14:09:21 +0000 |
commit | 50d0293555691012f96259de7f8682b94db58517 (patch) | |
tree | 2d3814f485377175796f05d2aa71014a0230e8d5 /compiler/codeGen | |
parent | 53da379cee909d23b9f785c2250e64cba34ad3b2 (diff) | |
download | haskell-50d0293555691012f96259de7f8682b94db58517.tar.gz |
Use "on the spot" solving for fundeps
When we spot an equality arising from a functional dependency,
we now use that equality (a "wanted") to rewrite the work-item
constraint right away. This avoids two dangers
Danger 1: If we send the original constraint on down the pipeline
it may react with an instance declaration, and in delicate
situations (when a Given overlaps with an instance) that
may produce new insoluble goals: see Trac #4952
Danger 2: If we don't rewrite the constraint, it may re-react
with the same thing later, and produce the same equality
again --> termination worries.
To achieve this required some refactoring of FunDeps.lhs (nicer
now!).
This patch also contains a couple of unrelated improvements
* A bad bug in TcSMonad.nestImplicTcS whereby the Tcs tyvars
of an outer implication were not untouchable inside
* Improved logging machinery for the type constraint solver;
use -ddump-cs-trace (probably with a wider default line width
-dppr-cols=200 or something)
Diffstat (limited to 'compiler/codeGen')
0 files changed, 0 insertions, 0 deletions