[commit: ghc] master: Simpify constraints from a TH bracket eagerly (43cc549)

Simon Marlow marlowsd at gmail.com
Thu Feb 10 10:20:04 CET 2011


Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/43cc549d6b596a0ba33fff2b126e5149f07eca29

>---------------------------------------------------------------

commit 43cc549d6b596a0ba33fff2b126e5149f07eca29
Author: simonpj at microsoft.com <unknown>
Date:   Wed Feb 9 17:50:03 2011 +0000

    Simpify constraints from a TH bracket eagerly
    
    See Trac #4949, where having a TH bracket implication
    was messing things up.  Better to get rid of it right away.

>---------------------------------------------------------------

 compiler/typecheck/TcSplice.lhs |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/compiler/typecheck/TcSplice.lhs b/compiler/typecheck/TcSplice.lhs
index 2e81314..1956e5b 100644
--- a/compiler/typecheck/TcSplice.lhs
+++ b/compiler/typecheck/TcSplice.lhs
@@ -348,10 +348,22 @@ tcBracket brack res_ty
           -- instance), but we aren't otherwise interested in the
           -- results. Nor do we care about ambiguous dictionaries etc.
           -- We will type check this bracket again at its usage site.
-       ; _ <- newImplication BracketSkol [] [] $
-              setStage brack_stage $
-              do { meta_ty <- tc_bracket cur_stage brack
-                 ; unifyType meta_ty res_ty }
+	  --
+	  -- We build a single implication constraint with a BracketSkol;
+	  -- that in turn tells simplifyCheck to report only definite
+	  -- errors
+       ; (_,lie) <- captureConstraints $
+              	    newImplication BracketSkol [] [] $
+              	    setStage brack_stage $
+              	    do { meta_ty <- tc_bracket cur_stage brack
+              	       ; unifyType meta_ty res_ty }
+
+          -- It's best to simplify the constraint now, even though in 
+	  -- principle some later unification might be useful for it,
+	  -- because we don't want these essentially-junk TH implication
+	  -- contraints floating around nested inside other constraints
+	  -- See for example Trac #4949
+       ; _ <- simplifyTop lie
 
         -- Return the original expression, not the type-decorated one
        ; pendings <- readMutVar pending_splices





More information about the Cvs-ghc mailing list