X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcSplice.lhs;fp=compiler%2Ftypecheck%2FTcSplice.lhs;h=1956e5ba7e24ad39e96e3dc60c202aaf964f3123;hp=2e813146f1ffb3499df374a47690a00dc20f7668;hb=43cc549d6b596a0ba33fff2b126e5149f07eca29;hpb=b076da6047bf4c6b3d74a97c6c5fd59ed3bdd114 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