-- We also do the TH -> HS syntax conversion inside the same
-- exception-cacthing thing so that if there are any lurking
-- exceptions in the data structure returned by hval, we'll
- -- encounter them inside the tryALlM
+ -- encounter them inside the try
either_tval <- tryAllM $ do
{ th_syn <- TH.runQ (unsafeCoerce# hval)
; case convert (getLoc expr) th_syn of
qCurrentModule = do { m <- getModule; return (moduleString m) }
qReify v = reify v
- qRecover = recoverM
+
+ -- For qRecover, discard error messages if
+ -- the recovery action is chosen. Otherwise
+ -- we'll only fail higher up. c.f. tryTcLIE_
+ qRecover recover main = do { (msgs, mb_res) <- tryTcErrs main
+ ; case mb_res of
+ Just val -> do { addMessages msgs -- There might be warnings
+ ; return val }
+ Nothing -> recover -- Discard all msgs
+ }
qRunIO io = ioToTcRn io
\end{code}