Implememt -fdefer-type-errors (Trac #5624)
[ghc.git] / compiler / typecheck / TcEvidence.lhs
index 87aaa32..7845f38 100644 (file)
@@ -461,6 +461,10 @@ data EvTerm
 \r
   | EvTupleMk [EvId]             -- tuple built from this stuff\r
 \r
+  | EvDelayedError Type FastString  -- Used with Opt_DeferTypeErrors\r
+                               -- See Note [Deferring coercion errors to runtime]\r
+                               -- in TcSimplify\r
+\r
   | EvSuperClass DictId Int      -- n'th superclass. Used for both equalities and\r
                                  -- dictionaries, even though the former have no\r
                                  -- selector Id.  We count up from _0_\r
@@ -523,12 +527,13 @@ isEmptyTcEvBinds (TcEvBinds {}) = panic "isEmptyTcEvBinds"
 \r
 evVarsOfTerm :: EvTerm -> [EvVar]\r
 evVarsOfTerm (EvId v) = [v]\r
-evVarsOfTerm (EvCoercion co)     = varSetElems (coVarsOfTcCo co)\r
-evVarsOfTerm (EvDFunApp _ _ evs) = evs\r
-evVarsOfTerm (EvTupleSel v _)    = [v]\r
-evVarsOfTerm (EvSuperClass v _)  = [v]\r
-evVarsOfTerm (EvCast v co)       = v : varSetElems (coVarsOfTcCo co)\r
-evVarsOfTerm (EvTupleMk evs)     = evs\r
+evVarsOfTerm (EvCoercion co)      = varSetElems (coVarsOfTcCo co)\r
+evVarsOfTerm (EvDFunApp _ _ evs)  = evs\r
+evVarsOfTerm (EvTupleSel v _)     = [v]\r
+evVarsOfTerm (EvSuperClass v _)   = [v]\r
+evVarsOfTerm (EvCast v co)        = v : varSetElems (coVarsOfTcCo co)\r
+evVarsOfTerm (EvTupleMk evs)      = evs\r
+evVarsOfTerm (EvDelayedError _ _) = []\r
 evVarsOfTerm (EvKindCast v co)   = v : varSetElems (coVarsOfTcCo co)\r
 \end{code}\r
 \r
@@ -589,5 +594,7 @@ instance Outputable EvTerm where
   ppr (EvTupleMk vs)     = ptext (sLit "tupmk") <+> ppr vs\r
   ppr (EvSuperClass d n) = ptext (sLit "sc") <> parens (ppr (d,n))\r
   ppr (EvDFunApp df tys ts) = ppr df <+> sep [ char '@' <> ppr tys, ppr ts ]\r
+  ppr (EvDelayedError ty msg) =     ptext (sLit "error") \r
+                                <+> sep [ char '@' <> ppr ty, ppr msg ]\r
 \end{code}\r
 \r