diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2017-04-25 13:15:44 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2017-04-28 09:55:07 +0100 |
commit | 4d5ab1f89ab4c082c10f67616ca4308d67923486 (patch) | |
tree | b40951f380feb94a409d979bf4ed04d2292002ed | |
parent | 6c2d9175c70d735834f0bd1673647d00f0a483b5 (diff) | |
download | haskell-4d5ab1f89ab4c082c10f67616ca4308d67923486.tar.gz |
Comments only
-rw-r--r-- | compiler/typecheck/TcRnTypes.hs | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/compiler/typecheck/TcRnTypes.hs b/compiler/typecheck/TcRnTypes.hs index 76184be795..4d399e6cbe 100644 --- a/compiler/typecheck/TcRnTypes.hs +++ b/compiler/typecheck/TcRnTypes.hs @@ -85,7 +85,7 @@ module TcRnTypes( andWC, unionsWC, mkSimpleWC, mkImplicWC, addInsols, getInsolubles, insolublesOnly, addSimples, addImplics, tyCoVarsOfWC, dropDerivedWC, dropDerivedSimples, dropDerivedInsols, - tyCoVarsOfWCList, + tyCoVarsOfWCList, trulyInsoluble, isDroppableDerivedLoc, insolubleImplic, arisesFromGivens, @@ -2409,7 +2409,11 @@ So a Given has EvVar inside it rather than (as previously) an EvTerm. -- EvVarDest. data TcEvDest = EvVarDest EvVar -- ^ bind this var to the evidence + -- EvVarDest is always used for non-type-equalities + -- e.g. class constraints + | HoleDest CoercionHole -- ^ fill in this hole with the evidence + -- HoleDest is always used for type-equalities -- See Note [Coercion holes] in TyCoRep data CtEvidence @@ -2456,12 +2460,16 @@ ctEvTerm ev@(CtWanted { ctev_dest = HoleDest _ }) = EvCoercion $ ctEvCoercion ev ctEvTerm ev = EvId (ctEvId ev) ctEvCoercion :: CtEvidence -> Coercion -ctEvCoercion ev@(CtWanted { ctev_dest = HoleDest hole, ctev_pred = pred }) - = case getEqPredTys_maybe pred of - Just (role, ty1, ty2) -> mkHoleCo hole role ty1 ty2 - _ -> pprPanic "ctEvTerm" (ppr ev) -ctEvCoercion (CtGiven { ctev_evar = ev_id }) = mkTcCoVarCo ev_id -ctEvCoercion ev = pprPanic "ctEvCoercion" (ppr ev) +ctEvCoercion (CtGiven { ctev_evar = ev_id }) + = mkTcCoVarCo ev_id +ctEvCoercion (CtWanted { ctev_dest = dest, ctev_pred = pred }) + | HoleDest hole <- dest + , Just (role, ty1, ty2) <- getEqPredTys_maybe pred + = -- ctEvCoercion is only called on type equalities + -- and they always have HoleDests + mkHoleCo hole role ty1 ty2 +ctEvCoercion ev + = pprPanic "ctEvCoercion" (ppr ev) ctEvId :: CtEvidence -> TcId ctEvId (CtWanted { ctev_dest = EvVarDest ev }) = ev |