From 6c4c33fc9cc4d9a4727a63f3a9681f7200354750 Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Thu, 17 Feb 2011 17:58:40 +0000 Subject: [PATCH] Comments only --- compiler/typecheck/TcCanonical.lhs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/compiler/typecheck/TcCanonical.lhs b/compiler/typecheck/TcCanonical.lhs index 8668d90..1974143 100644 --- a/compiler/typecheck/TcCanonical.lhs +++ b/compiler/typecheck/TcCanonical.lhs @@ -1001,6 +1001,22 @@ itself, and so on. %* * %************************************************************************ +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!). + \begin{code} rewriteWithFunDeps :: [Equation] -> [Xi] -> CtFlavor -- 1.7.10.4