-%
+ %
% (c) The AQUA Project, Glasgow University, 1996-1998
%
\section[TcHsSyn]{Specialisations of the @HsSyn@ syntax for the typechecker}
mappM (zonkCmdTop env) args `thenM` \ new_args ->
returnM (HsArrForm new_op fixity new_args)
-zonkExpr env (HsCoerce co_fn expr)
+zonkExpr env (HsWrap co_fn expr)
= zonkCoFn env co_fn `thenM` \ (env1, new_co_fn) ->
zonkExpr env1 expr `thenM` \ new_expr ->
- return (HsCoerce new_co_fn new_expr)
+ return (HsWrap new_co_fn new_expr)
zonkExpr env other = pprPanic "zonkExpr" (ppr other)
returnM (HsCmdTop new_cmd new_stack_tys new_ty new_ids)
-------------------------------------------------------------------------
-zonkCoFn :: ZonkEnv -> ExprCoFn -> TcM (ZonkEnv, ExprCoFn)
-zonkCoFn env CoHole = return (env, CoHole)
-zonkCoFn env (ExprCoFn co) = do { co' <- zonkTcTypeToType env co
- ; return (env, ExprCoFn co') }
-zonkCoFn env (CoCompose c1 c2) = do { (env1, c1') <- zonkCoFn env c1
+zonkCoFn :: ZonkEnv -> HsWrapper -> TcM (ZonkEnv, HsWrapper)
+zonkCoFn env WpHole = return (env, WpHole)
+zonkCoFn env (WpCompose c1 c2) = do { (env1, c1') <- zonkCoFn env c1
; (env2, c2') <- zonkCoFn env1 c2
- ; return (env2, CoCompose c1' c2') }
-zonkCoFn env (CoLam id) = do { id' <- zonkIdBndr env id
+ ; return (env2, WpCompose c1' c2') }
+zonkCoFn env (WpCo co) = do { co' <- zonkTcTypeToType env co
+ ; return (env, WpCo co') }
+zonkCoFn env (WpLam id) = do { id' <- zonkIdBndr env id
; let env1 = extendZonkEnv1 env id'
- ; return (env1, CoLam id') }
-zonkCoFn env (CoTyLam tv) = ASSERT( isImmutableTyVar tv )
- do { return (env, CoTyLam tv) }
-zonkCoFn env (CoApp id) = do { return (env, CoApp (zonkIdOcc env id)) }
-zonkCoFn env (CoTyApp ty) = do { ty' <- zonkTcTypeToType env ty
- ; return (env, CoTyApp ty') }
-zonkCoFn env (CoLet bs) = do { (env1, bs') <- zonkRecMonoBinds env bs
- ; return (env1, CoLet bs') }
+ ; return (env1, WpLam id') }
+zonkCoFn env (WpTyLam tv) = ASSERT( isImmutableTyVar tv )
+ do { return (env, WpTyLam tv) }
+zonkCoFn env (WpApp id) = do { return (env, WpApp (zonkIdOcc env id)) }
+zonkCoFn env (WpTyApp ty) = do { ty' <- zonkTcTypeToType env ty
+ ; return (env, WpTyApp ty') }
+zonkCoFn env (WpLet bs) = do { (env1, bs') <- zonkRecMonoBinds env bs
+ ; return (env1, WpLet bs') }
-------------------------------------------------------------------------
-------------------------------------------------------------------------
mapIPNameTc :: (a -> TcM b) -> IPName a -> TcM (IPName b)
-mapIPNameTc f (Dupable n) = f n `thenM` \ r -> returnM (Dupable r)
-mapIPNameTc f (Linear n) = f n `thenM` \ r -> returnM (Linear r)
+mapIPNameTc f (IPName n) = f n `thenM` \ r -> returnM (IPName r)
\end{code}
; return (env', InfixCon p1' p2') }
zonkConStuff env (RecCon rpats)
- = do { (env', pats') <- zonkPats env pats
- ; returnM (env', RecCon (fields `zip` pats')) }
- where
- (fields, pats) = unzip rpats
+ = do { let (fields, pats) = unzip [ (f, p) | HsRecField f p _ <- rpats ]
+ ; (env', pats') <- zonkPats env pats
+ ; let recCon = RecCon [ mkRecField f p | (f, p) <- zip fields pats' ]
+ ; returnM (env', recCon) }
---------------------------
zonkPats env [] = return (env, [])
zonkPats env (pat:pats) = do { (env1, pat') <- zonkPat env pat
- ; (env', pats') <- zonkPats env1 pats
- ; return (env', pat':pats') }
+ ; (env', pats') <- zonkPats env1 pats
+ ; return (env', pat':pats') }
\end{code}
%************************************************************************