Comments only
[ghc-hetmet.git] / compiler / typecheck / TcSMonad.lhs
index 5f555c5..4d6dcdf 100644 (file)
@@ -15,7 +15,7 @@ module TcSMonad (
     combineCtLoc, mkGivenFlavor,
 
     TcS, runTcS, failTcS, panicTcS, traceTcS, traceTcS0,  -- Basic functionality 
-    tryTcS, nestImplicTcS, wrapErrTcS, wrapWarnTcS,
+    tryTcS, nestImplicTcS, recoverTcS, wrapErrTcS, wrapWarnTcS,
     SimplContext(..), isInteractive, simplEqsOnly, performDefaulting,
        
        -- Creation of evidence variables
@@ -145,7 +145,8 @@ data CanonicalCt
        -- Invariant: 
        --   * tv not in tvs(xi)   (occurs check)
        --   * If constraint is given then typeKind xi ==  typeKind tv 
-       --                See Note [Spontaneous solving and kind compatibility] 
+       --      See Note [Spontaneous solving and kind compatibility] 
+       --          in TcInteract  
       cc_id     :: EvVar, 
       cc_flavor :: CtFlavor, 
       cc_tyvar :: TcTyVar, 
@@ -235,6 +236,8 @@ variable, is not canonical.  Why?
 
 Hence the invariant.
 
+The invariant is 
+
 Note [Canonical implicit parameter constraints]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 The type in a canonical implicit parameter constraint doesn't need to
@@ -491,6 +494,11 @@ nestImplicTcS ref untch (TcS thing_inside)
     in 
     thing_inside nest_env
 
+recoverTcS :: TcS a -> TcS a -> TcS a
+recoverTcS (TcS recovery_code) (TcS thing_inside)
+  = TcS $ \ env ->
+    TcM.recoverM (recovery_code env) (thing_inside env)
+
 ctxtUnderImplic :: SimplContext -> SimplContext
 -- See Note [Simplifying RULE lhs constraints] in TcSimplify
 ctxtUnderImplic SimplRuleLhs = SimplCheck