Commit ecd655aa authored by's avatar
Browse files

Gather constraints in program order

Provoked by a suggestion of Simon's, this patch makes a half-hearted attempt
to gather constraints in program order, so that we tend to report an error
at its first occurrence, rather than its last.  Examples:
	mdofail001, tcfail015

It's "half-hearted" because generally-speaking the typechecker does not
guaranteed to keep constraints in order; it treats them as a set.  Nevertheless
this very small change seems to improve matters, so it seems a good one.
parent a3a15a64
......@@ -702,10 +702,20 @@ emptyLIE = emptyBag
unitLIE inst = unitBag inst
mkLIE insts = listToBag insts
plusLIE lie1 lie2 = lie1 `unionBags` lie2
consLIE inst lie = inst `consBag` lie
plusLIEs lies = unionManyBags lies
lieToList = bagToList
listToLIE = listToBag
consLIE inst lie = lie `snocBag` inst
-- Putting the new Inst at the *end* of the bag is a half-hearted attempt
-- to ensure that we tend to report the *leftmost* type-constraint error
-- E.g. f :: [a]
-- f = [1,2,3]
-- we'd like to complain about the '1', not the '3'.
-- "Half-hearted" because the rest of the type checker makes no great
-- claims for retaining order in the constraint set. Still, this
-- seems to improve matters slightly. Exampes: mdofail001, tcfail015
......@@ -1971,9 +1971,6 @@ extractResults (Avails _ avails) wanteds
-- The sought Id can be one of the givens, via a superclass chain
-- and then we definitely don't want to generate an x=x binding!
-- | getSrcLoc id `precedesSrcLoc` srcSpanStart span
-- -> go avails (addBind binds w_span id (nlHsVar w_id)) irreds ws
| otherwise
-> go avails (addBind binds w (nlHsVar id)) irreds ws
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment