Make do-notation a bit more flexible (Trac #1537)
[ghc-hetmet.git] / compiler / typecheck / TcArrows.lhs
index 8276bc8..538eaa7 100644 (file)
@@ -42,6 +42,8 @@ import Type
 import SrcLoc
 import Outputable
 import Util
+
+import Control.Monad
 \end{code}
 
 %************************************************************************
@@ -60,7 +62,7 @@ tcProc pat cmd exp_ty
     do { ((exp_ty1, res_ty), coi) <- boxySplitAppTy exp_ty 
        ; ((arr_ty, arg_ty), coi1) <- boxySplitAppTy exp_ty1
        ; let cmd_env = CmdEnv { cmd_arr = arr_ty }
-       ; (pat', cmd') <- tcLamPat pat arg_ty (emptyRefinement, res_ty) $
+       ; (pat', cmd') <- tcProcPat pat arg_ty (emptyRefinement, res_ty) $
                          tcCmdTop cmd_env cmd []
         ; let res_coi = mkTransCoI coi (mkAppTyCoI exp_ty1 coi1 res_ty IdCo)
        ; return (pat', cmd', res_coi) 
@@ -128,12 +130,11 @@ tc_cmd env (HsLet binds (L body_loc body)) res_ty
        ; 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 }
@@ -206,7 +207,7 @@ tc_cmd env cmd@(HsLam (MatchGroup [L mtch_loc (match@(Match pats maybe_rhs_sig g
   where
     n_pats     = length pats
     stk'       = drop n_pats cmd_stk
-    match_ctxt = LambdaExpr    -- Maybe KappaExpr?
+    match_ctxt = (LambdaExpr :: HsMatchContext Name)   -- Maybe KappaExpr?
     pg_ctxt    = PatGuard match_ctxt
 
     tc_grhss (GRHSs grhss binds) res_ty
@@ -272,7 +273,7 @@ tc_cmd env cmd@(HsArrForm expr fixity cmd_args) (cmd_stk, res_ty)
                -- 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')
        }