import SrcLoc
import Outputable
import Util
+
+import Control.Monad
\end{code}
%************************************************************************
; return (HsLet binds' (L body_loc body')) }
tc_cmd env in_cmd@(HsCase scrut matches) (stk, res_ty)
- = addErrCtxt (cmdCtxt in_cmd) $
- addErrCtxt (caseScrutCtxt scrut) (
- tcInferRho scrut
- ) `thenM` \ (scrut', scrut_ty) ->
- tcMatchesCase match_ctxt scrut_ty matches res_ty `thenM` \ matches' ->
- returnM (HsCase scrut' matches')
+ = addErrCtxt (cmdCtxt in_cmd) $ do
+ (scrut', scrut_ty) <- addErrCtxt (caseScrutCtxt scrut) $
+ tcInferRho scrut
+ matches' <- tcMatchesCase match_ctxt scrut_ty matches res_ty
+ return (HsCase scrut' matches')
where
match_ctxt = MC { mc_what = CaseAlt,
mc_body = mc_body }
-- the s1..sm and check each cmd
; cmds' <- mapM (tc_cmd w_tv) cmds_w_tys
- ; returnM (HsArrForm (noLoc $ HsWrap (WpTyLam w_tv)
+ ; return (HsArrForm (noLoc $ HsWrap (WpTyLam w_tv)
(unLoc $ mkHsDictLet inst_binds expr'))
fixity cmds')
}