X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcArrows.lhs;h=bfb47d82ccced20a08d67052b30ff1ee6f1fa593;hb=b99310f05faee2abec850da4349fcd5c0498f7ca;hp=2316162c18a5b6193bfcf01846d1940a8b95a621;hpb=15cb792d18b1094e98c035dca6ecec5dad516056;p=ghc-hetmet.git diff --git a/compiler/typecheck/TcArrows.lhs b/compiler/typecheck/TcArrows.lhs index 2316162..bfb47d8 100644 --- a/compiler/typecheck/TcArrows.lhs +++ b/compiler/typecheck/TcArrows.lhs @@ -1,7 +1,8 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -\section{Typecheck arrow notation} +Typecheck arrow notation \begin{code} module TcArrows ( tcProc ) where @@ -11,32 +12,28 @@ module TcArrows ( tcProc ) where import {-# SOURCE #-} TcExpr( tcMonoExpr, tcInferRho ) import HsSyn -import TcHsSyn ( mkHsDictLet ) - -import TcMatches ( matchCtxt, tcStmts, tcMDoStmt, tcGuardStmt, - TcMatchCtxt(..), tcMatchesCase ) - -import TcType ( TcType, TcTauType, BoxyRhoType, mkFunTys, mkTyConApp, - mkTyVarTy, mkAppTys, tcSplitTyConApp_maybe, tcEqType, - SkolemInfo(..) ) -import TcMType ( newFlexiTyVarTy, tcInstSkolTyVars, zonkTcType ) -import TcBinds ( tcLocalBinds ) -import TcSimplify ( tcSimplifyCheck ) -import TcGadt ( Refinement, emptyRefinement, refineResType ) -import TcPat ( tcLamPat, tcLamPats ) -import TcUnify ( checkSigTyVarsWrt, boxySplitAppTy ) +import TcHsSyn + +import TcMatches + +import TcType +import TcMType +import TcBinds +import TcSimplify +import TcGadt +import TcPat +import TcUnify import TcRnMonad -import Inst ( tcSyntaxName ) -import Name ( Name ) -import TysWiredIn ( boolTy, pairTyCon ) +import Inst +import Name +import TysWiredIn import VarSet -import TysPrim ( alphaTyVar ) -import Type ( Kind, mkArrowKinds, liftedTypeKind, openTypeKind, tyVarsOfTypes ) +import TysPrim +import Type -import SrcLoc ( Located(..), noLoc, unLoc ) +import SrcLoc import Outputable -import Util ( lengthAtLeast ) - +import Util \end{code} %************************************************************************ @@ -101,7 +98,7 @@ tcGuardedCmd :: CmdEnv -> LHsExpr Name -> CmdStack tcGuardedCmd env expr stk (reft, res_ty) = do { let (co, res_ty') = refineResType reft res_ty ; body <- tcCmd env expr (stk, res_ty') - ; return (mkLHsCoerce co body) } + ; return (mkLHsWrap co body) } tcCmd :: CmdEnv -> LHsExpr Name -> (CmdStack, TcTauType) -> TcM (LHsExpr TcId) -- The main recursive function @@ -241,7 +238,7 @@ tc_cmd env cmd@(HsArrForm expr fixity cmd_args) (cmd_stk, res_ty) = addErrCtxt (cmdCtxt cmd) $ do { cmds_w_tys <- zipWithM new_cmd_ty cmd_args [1..] ; span <- getSrcSpanM - ; [w_tv] <- tcInstSkolTyVars (ArrowSkol span) [alphaTyVar] + ; [w_tv] <- tcInstSkolTyVars ArrowSkol [alphaTyVar] ; let w_ty = mkTyVarTy w_tv -- Just a convenient starting point -- a ((w,t1) .. tn) t @@ -254,7 +251,8 @@ tc_cmd env cmd@(HsArrForm expr fixity cmd_args) (cmd_stk, res_ty) -- Check expr ; (expr', lie) <- escapeArrowScope (getLIE (tcMonoExpr expr e_ty)) - ; inst_binds <- tcSimplifyCheck sig_msg [w_tv] [] lie + ; loc <- getInstLoc (SigOrigin ArrowSkol) + ; inst_binds <- tcSimplifyCheck loc [w_tv] [] lie -- Check that the polymorphic variable hasn't been unified with anything -- and is not free in res_ty or the cmd_stk (i.e. t, t1..tn) @@ -264,7 +262,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 $ HsCoerce (CoTyLam w_tv) + ; returnM (HsArrForm (noLoc $ HsWrap (WpTyLam w_tv) (unLoc $ mkHsDictLet inst_binds expr')) fixity cmds') } @@ -306,8 +304,6 @@ tc_cmd env cmd@(HsArrForm expr fixity cmd_args) (cmd_stk, res_ty) other -> (ty, []) - sig_msg = ptext SLIT("expected type of a command form") - ----------------------------------------------------------------- -- Base case for illegal commands -- This is where expressions that aren't commands get rejected