View patterns, record wildcards, and record puns
[ghc-hetmet.git] / compiler / typecheck / TcArrows.lhs
index b14726b..0055d64 100644 (file)
@@ -5,11 +5,11 @@
 Typecheck arrow notation
 
 \begin{code}
-{-# OPTIONS_GHC -w #-}
+{-# OPTIONS -w #-}
 -- The above warning supression flag is a temporary kludge.
 -- While working on this module you are encouraged to remove it and fix
 -- any warnings in the module. See
---     http://hackage.haskell.org/trac/ghc/wiki/WorkingConventions#Warnings
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
 -- for details
 
 module TcArrows ( tcProc ) where
@@ -31,6 +31,7 @@ import TcGadt
 import TcPat
 import TcUnify
 import TcRnMonad
+import Coercion
 import Inst
 import Name
 import TysWiredIn
@@ -52,16 +53,18 @@ import Util
 \begin{code}
 tcProc :: InPat Name -> LHsCmdTop Name         -- proc pat -> expr
        -> BoxyRhoType                          -- Expected type of whole proc expression
-       -> TcM (OutPat TcId, LHsCmdTop TcId)
+       -> TcM (OutPat TcId, LHsCmdTop TcId, CoercionI)
 
 tcProc pat cmd exp_ty
   = newArrowScope $
-    do { (exp_ty1, res_ty) <- boxySplitAppTy exp_ty 
-       ; (arr_ty, arg_ty)  <- boxySplitAppTy exp_ty1
+    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) $
                          tcCmdTop cmd_env cmd []
-       ; return (pat', cmd') }
+        ; let res_coi = mkTransCoI coi (mkAppTyCoI exp_ty1 coi1 res_ty IdCo)
+       ; return (pat', cmd', res_coi) 
+        }
 \end{code}
 
 
@@ -203,7 +206,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