From d90023f2e54e2c0b5aad169d0f55748a152fecce Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Tue, 9 Jan 2007 13:47:19 +0000 Subject: [PATCH] Fix egregious bug in implication constraints Build an implication constraint if there is a non-trivial refinement, even if there are no other 'given' constraints. Test = gadt/set.hs --- compiler/typecheck/TcSimplify.lhs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/typecheck/TcSimplify.lhs b/compiler/typecheck/TcSimplify.lhs index 708b8e4..7b9f1f1 100644 --- a/compiler/typecheck/TcSimplify.lhs +++ b/compiler/typecheck/TcSimplify.lhs @@ -849,10 +849,11 @@ bindIrredsR loc qtvs co_vars reft givens irreds -- The givens can include methods -- See Note [Pruning the givens in an implication constraint] - -- If there are no 'givens', then it's safe to + -- If there are no 'givens' *and* the refinement is empty + -- (the refinement is like more givens), then it's safe to -- partition the 'wanteds' by their qtvs, thereby trimming irreds -- See Note [Freeness and implications] - ; irreds' <- if null givens' + ; irreds' <- if null givens' && isEmptyRefinement reft then do { let qtv_set = mkVarSet qtvs (frees, real_irreds) = partition (isFreeWrtTyVars qtv_set) irreds -- 1.7.10.4