-- which is also the location of all the
-- given evidence variables
- ic_wanted :: WantedConstraints, -- The wanted
+ ic_wanted :: WantedConstraints, -- The wanted
ic_insol :: Bool, -- True iff insolubleWC ic_wantted is true
ic_binds :: EvBindsVar -- Points to the place to fill in the
= do { traceTcS "solveWanteds {" (ppr wanted)
-- Try the flat bit
+ -- Discard from insols all the derived/given constraints
+ -- because they will show up again when we try to solve
+ -- everything else. Solving them a second time is a bit
+ -- of a waste, but the code is simple, and the program is
+ -- wrong anyway!
; let all_flats = flats `unionBags` keepWanted insols
; inert1 <- solveInteractWanted inert (bagToList all_flats)