Add comments about pruning implication constraints
authorsimonpj@microsoft.com <unknown>
Mon, 11 Dec 2006 16:43:33 +0000 (16:43 +0000)
committersimonpj@microsoft.com <unknown>
Mon, 11 Dec 2006 16:43:33 +0000 (16:43 +0000)
compiler/typecheck/TcSimplify.lhs

index 182a7c5..1689dab 100644 (file)
@@ -848,6 +848,7 @@ bindIrredsR loc qtvs co_vars reft givens irreds
   | otherwise
   = do { let givens' = filter isDict givens
                -- The givens can include methods
   | otherwise
   = do { let givens' = filter isDict givens
                -- The givens can include methods
+               -- See Note [Pruning the givens in an implication constraint]
 
           -- If there are no 'givens', then it's safe to 
           -- partition the 'wanteds' by their qtvs, thereby trimming irreds
 
           -- If there are no 'givens', then it's safe to 
           -- partition the 'wanteds' by their qtvs, thereby trimming irreds
@@ -1876,6 +1877,20 @@ We can satisfy the (C Int) from the superclass of D, so we don't want
 to float the (C Int) out, even though it mentions no type variable in
 the constraints!
 
 to float the (C Int) out, even though it mentions no type variable in
 the constraints!
 
+Note [Pruning the givens in an implication constraint]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Suppose we are about to form the implication constraint
+       forall tvs.  Eq a => Ord b
+The (Eq a) cannot contribute to the (Ord b), because it has no access to
+the type variable 'b'.  So we could filter out the (Eq a) from the givens.
+
+Doing so would be a bit tidier, but all the implication constraints get
+simplified away by the optimiser, so it's no great win.   So I don't take
+advantage of that at the moment.
+
+If you do, BE CAREFUL of wobbly type variables.
+
+
 %************************************************************************
 %*                                                                     *
                Avails and AvailHow: the pool of evidence
 %************************************************************************
 %*                                                                     *
                Avails and AvailHow: the pool of evidence