Commit f0c99958 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Use return instead of returnM, and similar tidy-ups

parent 20612276
......@@ -30,7 +30,9 @@ module RnEnv (
mapFvRn, mapFvRnCPS,
warnUnusedMatches, warnUnusedModules, warnUnusedImports,
warnUnusedTopBinds, warnUnusedLocalBinds,
dataTcOccs, unknownNameErr, perhapsForallMsg
dataTcOccs, unknownNameErr, perhapsForallMsg,
checkM
) where
#include "HsVersions.h"
......
......@@ -61,15 +61,6 @@ thenM = (>>=)
thenM_ :: Monad a => a b -> a c -> a c
thenM_ = (>>)
returnM :: Monad m => a -> m a
returnM = return
mappM :: (Monad m) => (a -> m b) -> [a] -> m [b]
mappM = mapM
checkM :: Monad m => Bool -> m () -> m ()
checkM = unless
\end{code}
%************************************************************************
......@@ -82,7 +73,7 @@ checkM = unless
rnExprs :: [LHsExpr RdrName] -> RnM ([LHsExpr Name], FreeVars)
rnExprs ls = rnExprs' ls emptyUniqSet
where
rnExprs' [] acc = returnM ([], acc)
rnExprs' [] acc = return ([], acc)
rnExprs' (expr:exprs) acc
= rnLExpr expr `thenM` \ (expr', fvExpr) ->
......@@ -92,7 +83,7 @@ rnExprs ls = rnExprs' ls emptyUniqSet
acc' = acc `plusFV` fvExpr
in
acc' `seq` rnExprs' exprs acc' `thenM` \ (exprs', fvExprs) ->
returnM (expr':exprs', fvExprs)
return (expr':exprs', fvExprs)
\end{code}
Variables. We look up the variable and return the resulting name.
......@@ -120,7 +111,7 @@ rnExpr (HsVar v)
rnExpr (HsIPVar v)
= newIPNameRn v `thenM` \ name ->
returnM (HsIPVar name, emptyFVs)
return (HsIPVar name, emptyFVs)
rnExpr (HsLit lit@(HsString s))
= do {
......@@ -129,21 +120,21 @@ rnExpr (HsLit lit@(HsString s))
rnExpr (HsOverLit (mkHsIsString s placeHolderType))
else -- Same as below
rnLit lit `thenM_`
returnM (HsLit lit, emptyFVs)
return (HsLit lit, emptyFVs)
}
rnExpr (HsLit lit)
= rnLit lit `thenM_`
returnM (HsLit lit, emptyFVs)
return (HsLit lit, emptyFVs)
rnExpr (HsOverLit lit)
= rnOverLit lit `thenM` \ (lit', fvs) ->
returnM (HsOverLit lit', fvs)
return (HsOverLit lit', fvs)
rnExpr (HsApp fun arg)
= rnLExpr fun `thenM` \ (fun',fvFun) ->
rnLExpr arg `thenM` \ (arg',fvArg) ->
returnM (HsApp fun' arg', fvFun `plusFV` fvArg)
return (HsApp fun' arg', fvFun `plusFV` fvArg)
rnExpr (OpApp e1 (L op_loc (HsVar op_rdr)) _ e2)
= do { (e1', fv_e1) <- rnLExpr e1
......@@ -165,7 +156,7 @@ rnExpr (NegApp e _)
= rnLExpr e `thenM` \ (e', fv_e) ->
lookupSyntaxName negateName `thenM` \ (neg_name, fv_neg) ->
mkNegAppRn e' neg_name `thenM` \ final_e ->
returnM (final_e, fv_e `plusFV` fv_neg)
return (final_e, fv_e `plusFV` fv_neg)
------------------------------------------
-- Template Haskell extensions
......@@ -174,11 +165,11 @@ rnExpr (NegApp e _)
rnExpr e@(HsBracket br_body)
= checkTH e "bracket" `thenM_`
rnBracket br_body `thenM` \ (body', fvs_e) ->
returnM (HsBracket body', fvs_e)
return (HsBracket body', fvs_e)
rnExpr (HsSpliceE splice)
= rnSplice splice `thenM` \ (splice', fvs) ->
returnM (HsSpliceE splice', fvs)
return (HsSpliceE splice', fvs)
#ifndef GHCI
rnExpr e@(HsQuasiQuoteE _) = pprPanic "Cant do quasiquotation without GHCi" (ppr e)
......@@ -187,7 +178,7 @@ rnExpr (HsQuasiQuoteE qq)
= rnQuasiQuote qq `thenM` \ (qq', fvs_qq) ->
runQuasiQuoteExpr qq' `thenM` \ (L _ expr') ->
rnExpr expr' `thenM` \ (expr'', fvs_expr) ->
returnM (expr'', fvs_qq `plusFV` fvs_expr)
return (expr'', fvs_qq `plusFV` fvs_expr)
#endif /* GHCI */
---------------------------------------------
......@@ -213,28 +204,28 @@ rnExpr expr@(SectionR {})
---------------------------------------------
rnExpr (HsCoreAnn ann expr)
= rnLExpr expr `thenM` \ (expr', fvs_expr) ->
returnM (HsCoreAnn ann expr', fvs_expr)
return (HsCoreAnn ann expr', fvs_expr)
rnExpr (HsSCC lbl expr)
= rnLExpr expr `thenM` \ (expr', fvs_expr) ->
returnM (HsSCC lbl expr', fvs_expr)
return (HsSCC lbl expr', fvs_expr)
rnExpr (HsTickPragma info expr)
= rnLExpr expr `thenM` \ (expr', fvs_expr) ->
returnM (HsTickPragma info expr', fvs_expr)
return (HsTickPragma info expr', fvs_expr)
rnExpr (HsLam matches)
= rnMatchGroup LambdaExpr matches `thenM` \ (matches', fvMatch) ->
returnM (HsLam matches', fvMatch)
return (HsLam matches', fvMatch)
rnExpr (HsCase expr matches)
= rnLExpr expr `thenM` \ (new_expr, e_fvs) ->
rnMatchGroup CaseAlt matches `thenM` \ (new_matches, ms_fvs) ->
returnM (HsCase new_expr new_matches, e_fvs `plusFV` ms_fvs)
return (HsCase new_expr new_matches, e_fvs `plusFV` ms_fvs)
rnExpr (HsLet binds expr)
= rnLocalBindsAndThen binds $ \ binds' ->
rnLExpr expr `thenM` \ (expr',fvExpr) ->
returnM (HsLet binds' expr', fvExpr)
return (HsLet binds' expr', fvExpr)
rnExpr (HsDo do_or_lc stmts body _)
= do { ((stmts', body'), fvs) <- rnStmts do_or_lc stmts $
......@@ -243,16 +234,16 @@ rnExpr (HsDo do_or_lc stmts body _)
rnExpr (ExplicitList _ exps)
= rnExprs exps `thenM` \ (exps', fvs) ->
returnM (ExplicitList placeHolderType exps', fvs)
return (ExplicitList placeHolderType exps', fvs)
rnExpr (ExplicitPArr _ exps)
= rnExprs exps `thenM` \ (exps', fvs) ->
returnM (ExplicitPArr placeHolderType exps', fvs)
return (ExplicitPArr placeHolderType exps', fvs)
rnExpr (ExplicitTuple exps boxity)
= checkTupSize (length exps) `thenM_`
rnExprs exps `thenM` \ (exps', fvs) ->
returnM (ExplicitTuple exps' boxity, fvs)
return (ExplicitTuple exps' boxity, fvs)
rnExpr (RecordCon con_id _ rbinds)
= do { conname <- lookupLocatedOccRn con_id
......@@ -278,21 +269,21 @@ rnExpr (HsIf p b1 b2)
= rnLExpr p `thenM` \ (p', fvP) ->
rnLExpr b1 `thenM` \ (b1', fvB1) ->
rnLExpr b2 `thenM` \ (b2', fvB2) ->
returnM (HsIf p' b1' b2', plusFVs [fvP, fvB1, fvB2])
return (HsIf p' b1' b2', plusFVs [fvP, fvB1, fvB2])
rnExpr (HsType a)
= rnHsTypeFVs doc a `thenM` \ (t, fvT) ->
returnM (HsType t, fvT)
return (HsType t, fvT)
where
doc = text "In a type argument"
rnExpr (ArithSeq _ seq)
= rnArithSeq seq `thenM` \ (new_seq, fvs) ->
returnM (ArithSeq noPostTcExpr new_seq, fvs)
return (ArithSeq noPostTcExpr new_seq, fvs)
rnExpr (PArrSeq _ seq)
= rnArithSeq seq `thenM` \ (new_seq, fvs) ->
returnM (PArrSeq noPostTcExpr new_seq, fvs)
return (PArrSeq noPostTcExpr new_seq, fvs)
\end{code}
These three are pattern syntax appearing in expressions.
......@@ -317,12 +308,12 @@ rnExpr (HsProc pat body)
= newArrowScope $
rnPatsAndThen_LocalRightwards ProcExpr [pat] $ \ [pat'] ->
rnCmdTop body `thenM` \ (body',fvBody) ->
returnM (HsProc pat' body', fvBody)
return (HsProc pat' body', fvBody)
rnExpr (HsArrApp arrow arg _ ho rtl)
= select_arrow_scope (rnLExpr arrow) `thenM` \ (arrow',fvArrow) ->
rnLExpr arg `thenM` \ (arg',fvArg) ->
returnM (HsArrApp arrow' arg' placeHolderType ho rtl,
return (HsArrApp arrow' arg' placeHolderType ho rtl,
fvArrow `plusFV` fvArg)
where
select_arrow_scope tc = case ho of
......@@ -341,13 +332,13 @@ rnExpr (HsArrForm op (Just _) [arg1, arg2])
lookupFixityRn op_name `thenM` \ fixity ->
mkOpFormRn arg1' op' fixity arg2' `thenM` \ final_e ->
returnM (final_e,
return (final_e,
fv_arg1 `plusFV` fv_op `plusFV` fv_arg2)
rnExpr (HsArrForm op fixity cmds)
= escapeArrowScope (rnLExpr op) `thenM` \ (op',fvOp) ->
rnCmdArgs cmds `thenM` \ (cmds',fvCmds) ->
returnM (HsArrForm op' fixity cmds', fvOp `plusFV` fvCmds)
return (HsArrForm op' fixity cmds', fvOp `plusFV` fvCmds)
rnExpr other = pprPanic "rnExpr: unexpected expression" (ppr other)
-- HsWrap
......@@ -378,11 +369,11 @@ rnSection other = pprPanic "rnSection" (ppr other)
\begin{code}
rnCmdArgs :: [LHsCmdTop RdrName] -> RnM ([LHsCmdTop Name], FreeVars)
rnCmdArgs [] = returnM ([], emptyFVs)
rnCmdArgs [] = return ([], emptyFVs)
rnCmdArgs (arg:args)
= rnCmdTop arg `thenM` \ (arg',fvArg) ->
rnCmdArgs args `thenM` \ (args',fvArgs) ->
returnM (arg':args', fvArg `plusFV` fvArgs)
return (arg':args', fvArg `plusFV` fvArgs)
rnCmdTop :: LHsCmdTop RdrName -> RnM (LHsCmdTop Name, FreeVars)
rnCmdTop = wrapLocFstM rnCmdTop'
......@@ -396,7 +387,7 @@ rnCmdTop = wrapLocFstM rnCmdTop'
-- Generate the rebindable syntax for the monad
lookupSyntaxTable cmd_names `thenM` \ (cmd_names', cmd_fvs) ->
returnM (HsCmdTop cmd' [] placeHolderType cmd_names',
return (HsCmdTop cmd' [] placeHolderType cmd_names',
fvCmd `plusFV` cmd_fvs)
---------------------------------------------------
......@@ -547,23 +538,23 @@ methodNamesStmt (GroupStmt _ _) = emptyFVs
rnArithSeq :: ArithSeqInfo RdrName -> RnM (ArithSeqInfo Name, FreeVars)
rnArithSeq (From expr)
= rnLExpr expr `thenM` \ (expr', fvExpr) ->
returnM (From expr', fvExpr)
return (From expr', fvExpr)
rnArithSeq (FromThen expr1 expr2)
= rnLExpr expr1 `thenM` \ (expr1', fvExpr1) ->
rnLExpr expr2 `thenM` \ (expr2', fvExpr2) ->
returnM (FromThen expr1' expr2', fvExpr1 `plusFV` fvExpr2)
return (FromThen expr1' expr2', fvExpr1 `plusFV` fvExpr2)
rnArithSeq (FromTo expr1 expr2)
= rnLExpr expr1 `thenM` \ (expr1', fvExpr1) ->
rnLExpr expr2 `thenM` \ (expr2', fvExpr2) ->
returnM (FromTo expr1' expr2', fvExpr1 `plusFV` fvExpr2)
return (FromTo expr1' expr2', fvExpr1 `plusFV` fvExpr2)
rnArithSeq (FromThenTo expr1 expr2 expr3)
= rnLExpr expr1 `thenM` \ (expr1', fvExpr1) ->
rnLExpr expr2 `thenM` \ (expr2', fvExpr2) ->
rnLExpr expr3 `thenM` \ (expr3', fvExpr3) ->
returnM (FromThenTo expr1' expr2' expr3',
return (FromThenTo expr1' expr2' expr3',
plusFVs [fvExpr1, fvExpr2, fvExpr3])
\end{code}
......@@ -580,7 +571,7 @@ rnBracket (VarBr n) = do { name <- lookupOccRn n
; checkM (nameIsLocalOrFrom this_mod name) $ -- Reason: deprecation checking asumes the
do { loadInterfaceForName msg name -- home interface is loaded, and this is the
; return () } -- only way that is going to happen
; returnM (VarBr name, unitFV name) }
; return (VarBr name, unitFV name) }
where
msg = ptext (sLit "Need interface for Template Haskell quoted Name")
......@@ -803,7 +794,7 @@ rnParallelStmts ctxt segs thing_inside = do
let (bndrs', dups) = removeDups cmpByOcc bndrs
inner_env = extendLocalRdrEnv orig_lcl_env bndrs'
mappM dupErr dups
mapM dupErr dups
(thing, fvs) <- setLocalRdrEnv inner_env thing_inside
return (([], thing), fvs)
......@@ -970,7 +961,7 @@ rn_rec_stmts_lhs fix_env stmts =
-- don't bind all of the variables from the Stmt at once
-- with bindLocatedLocals.
checkDupRdrNames doc boundNames
mappM (rn_rec_stmt_lhs fix_env) stmts `thenM` \ ls -> returnM (concat ls)
mapM (rn_rec_stmt_lhs fix_env) stmts `thenM` \ ls -> return (concat ls)
-- right-hand-sides
......@@ -982,7 +973,7 @@ rn_rec_stmt :: [Name] -> LStmtLR Name RdrName -> FreeVars -> RnM [Segment (LStmt
rn_rec_stmt _ (L loc (ExprStmt expr _ _)) _
= rnLExpr expr `thenM` \ (expr', fvs) ->
lookupSyntaxName thenMName `thenM` \ (then_op, fvs1) ->
returnM [(emptyNameSet, fvs `plusFV` fvs1, emptyNameSet,
return [(emptyNameSet, fvs `plusFV` fvs1, emptyNameSet,
L loc (ExprStmt expr' then_op placeHolderType))]
rn_rec_stmt _ (L loc (BindStmt pat' expr _ _)) fv_pat
......@@ -993,7 +984,7 @@ rn_rec_stmt _ (L loc (BindStmt pat' expr _ _)) fv_pat
bndrs = mkNameSet (collectPatBinders pat')
fvs = fv_expr `plusFV` fv_pat `plusFV` fvs1 `plusFV` fvs2
in
returnM [(bndrs, fvs, bndrs `intersectNameSet` fvs,
return [(bndrs, fvs, bndrs `intersectNameSet` fvs,
L loc (BindStmt pat' expr' bind_op fail_op))]
rn_rec_stmt _ (L _ (LetStmt binds@(HsIPBinds _))) _
......@@ -1003,7 +994,7 @@ rn_rec_stmt all_bndrs (L loc (LetStmt (HsValBinds binds'))) _ = do
(binds', du_binds) <-
-- fixities and unused are handled above in rn_rec_stmts_and_then
rnValBindsRHS (mkNameSet all_bndrs) binds'
returnM [(duDefs du_binds, duUses du_binds,
return [(duDefs du_binds, duUses du_binds,
emptyNameSet, L loc (LetStmt (HsValBinds binds')))]
-- no RecStmt case becuase they get flattened above when doing the LHSes
......@@ -1023,8 +1014,8 @@ rn_rec_stmt _ (L _ (LetStmt EmptyLocalBinds)) _
= panic "rn_rec_stmt: LetStmt EmptyLocalBinds"
rn_rec_stmts :: [Name] -> [(LStmtLR Name RdrName, FreeVars)] -> RnM [Segment (LStmt Name)]
rn_rec_stmts bndrs stmts = mappM (uncurry (rn_rec_stmt bndrs)) stmts `thenM` \ segs_s ->
returnM (concat segs_s)
rn_rec_stmts bndrs stmts = mapM (uncurry (rn_rec_stmt bndrs)) stmts `thenM` \ segs_s ->
return (concat segs_s)
---------------------------------------------
addFwdRefs :: [Segment a] -> [Segment a]
......
......@@ -28,6 +28,7 @@ import RnEnv ( lookupLocalDataTcNames, lookupLocatedOccRn,
bindLocatedLocalsFV, bindPatSigTyVarsFV,
bindTyVarsRn, extendTyVarEnvFVRn,
bindLocalNames, checkDupRdrNames, mapFvRn,
checkM
)
import RnNames ( getLocalNonValBinders, extendGlobalRdrEnvRn )
import HscTypes ( GenAvailInfo(..), availsToNameSet )
......@@ -61,18 +62,6 @@ thenM = (>>=)
thenM_ :: Monad a => a b -> a c -> a c
thenM_ = (>>)
returnM :: Monad m => a -> m a
returnM = return
mappM :: (Monad m) => (a -> m b) -> [a] -> m [b]
mappM = mapM
mappM_ :: (Monad m) => (a -> m b) -> [a] -> m ()
mappM_ = mapM_
checkM :: Monad m => Bool -> m () -> m ()
checkM = unless
\end{code}
@rnSourceDecl@ `renames' declarations.
......@@ -310,18 +299,18 @@ gather them together.
-- checks that the deprecations are defined locally, and that there are no duplicates
rnSrcWarnDecls :: NameSet -> [LWarnDecl RdrName] -> RnM Warnings
rnSrcWarnDecls _bound_names []
= returnM NoWarnings
= return NoWarnings
rnSrcWarnDecls bound_names decls
= do { -- check for duplicates
; mappM_ (\ (lrdr:lrdr':_) -> addLocErr lrdr (dupWarnDecl lrdr')) warn_rdr_dups
; mappM (addLocM rn_deprec) decls `thenM` \ pairs_s ->
returnM (WarnSome ((concat pairs_s))) }
; mapM_ (\ (lrdr:lrdr':_) -> addLocErr lrdr (dupWarnDecl lrdr')) warn_rdr_dups
; mapM (addLocM rn_deprec) decls `thenM` \ pairs_s ->
return (WarnSome ((concat pairs_s))) }
where
rn_deprec (Warning rdr_name txt)
-- ensures that the names are defined locally
= lookupLocalDataTcNames bound_names what rdr_name `thenM` \ names ->
returnM [(nameOccName name, txt) | name <- names]
return [(nameOccName name, txt) | name <- names]
what = ptext (sLit "deprecation")
......@@ -368,7 +357,7 @@ rnAnnProvenance provenance = do
rnDefaultDecl :: DefaultDecl RdrName -> RnM (DefaultDecl Name, FreeVars)
rnDefaultDecl (DefaultDecl tys)
= mapFvRn (rnHsTypeFVs doc_str) tys `thenM` \ (tys', fvs) ->
returnM (DefaultDecl tys', fvs)
return (DefaultDecl tys', fvs)
where
doc_str = text "In a `default' declaration"
\end{code}
......@@ -384,12 +373,12 @@ rnHsForeignDecl :: ForeignDecl RdrName -> RnM (ForeignDecl Name, FreeVars)
rnHsForeignDecl (ForeignImport name ty spec)
= lookupLocatedTopBndrRn name `thenM` \ name' ->
rnHsTypeFVs (fo_decl_msg name) ty `thenM` \ (ty', fvs) ->
returnM (ForeignImport name' ty' spec, fvs)
return (ForeignImport name' ty' spec, fvs)
rnHsForeignDecl (ForeignExport name ty spec)
= lookupLocatedOccRn name `thenM` \ name' ->
rnHsTypeFVs (fo_decl_msg name) ty `thenM` \ (ty', fvs) ->
returnM (ForeignExport name' ty' spec, fvs `addOneFV` unLoc name')
return (ForeignExport name' ty' spec, fvs `addOneFV` unLoc name')
-- NB: a foreign export is an *occurrence site* for name, so
-- we add it to the free-variable list. It might, for example,
-- be imported from another module
......@@ -461,7 +450,7 @@ rnSrcInstDecl (InstDecl inst_ty mbinds uprags ats)
bindLocalNames binders
(renameSigs (Just bndr_set) okInstDclSig uprags) `thenM` \ uprags' ->
returnM (InstDecl inst_ty' mbinds' uprags' ats',
return (InstDecl inst_ty' mbinds' uprags' ats',
meth_fvs `plusFV` at_fvs
`plusFV` hsSigsFVs uprags'
`plusFV` extractHsTyNames inst_ty')
......@@ -548,10 +537,10 @@ rnHsRuleDecl (HsRule rule_name act vars lhs _fv_lhs rhs _fv_rhs)
get_var (RuleBndrSig v _) = v
rn_var (RuleBndr (L loc _), id)
= returnM (RuleBndr (L loc id), emptyFVs)
= return (RuleBndr (L loc id), emptyFVs)
rn_var (RuleBndrSig (L loc _) t, id)
= rnHsTypeFVs doc t `thenM` \ (t', fvs) ->
returnM (RuleBndrSig (L loc id) t', fvs)
return (RuleBndrSig (L loc id) t', fvs)
badRuleVar :: FastString -> Name -> SDoc
badRuleVar name var
......@@ -651,7 +640,7 @@ However, we can also do some scoping checks at the same time.
rnTyClDecl :: TyClDecl RdrName -> RnM (TyClDecl Name, FreeVars)
rnTyClDecl (ForeignType {tcdLName = name, tcdFoType = fo_type, tcdExtName = ext_name})
= lookupLocatedTopBndrRn name `thenM` \ name' ->
returnM (ForeignType {tcdLName = name', tcdFoType = fo_type, tcdExtName = ext_name},
return (ForeignType {tcdLName = name', tcdFoType = fo_type, tcdExtName = ext_name},
emptyFVs)
-- all flavours of type family declarations ("type family", "newtype fanily",
......@@ -678,7 +667,7 @@ rnTyClDecl (tydecl@TyData {tcdND = new_or_data, tcdCtxt = context,
; condecls' <- rnConDecls (unLoc tycon') condecls
-- No need to check for duplicate constructor decls
-- since that is done by RnNames.extendGlobalRdrEnvRn
; returnM (TyData {tcdND = new_or_data, tcdCtxt = context',
; return (TyData {tcdND = new_or_data, tcdCtxt = context',
tcdLName = tycon', tcdTyVars = tyvars',
tcdTyPats = typats', tcdKindSig = Nothing,
tcdCons = condecls', tcdDerivs = derivs'},
......@@ -709,7 +698,7 @@ rnTyClDecl (tydecl@TyData {tcdND = new_or_data, tcdCtxt = context,
-- No need to check for duplicate constructor decls
-- since that is done by RnNames.extendGlobalRdrEnvRn
; returnM (TyData {tcdND = new_or_data, tcdCtxt = noLoc [],
; return (TyData {tcdND = new_or_data, tcdCtxt = noLoc [],
tcdLName = tycon', tcdTyVars = tyvars',
tcdTyPats = typats', tcdKindSig = sig,
tcdCons = condecls', tcdDerivs = derivs'},
......@@ -727,9 +716,9 @@ rnTyClDecl (tydecl@TyData {tcdND = new_or_data, tcdCtxt = context,
data_doc = text "In the data type declaration for" <+> quotes (ppr tycon)
rn_derivs Nothing = returnM (Nothing, emptyFVs)
rn_derivs Nothing = return (Nothing, emptyFVs)
rn_derivs (Just ds) = rnLHsTypes data_doc ds `thenM` \ ds' ->
returnM (Just ds', extractHsTyNames_s ds')
return (Just ds', extractHsTyNames_s ds')
-- "type" and "type instance" declarations
rnTyClDecl tydecl@(TySynonym {tcdLName = name,
......@@ -741,7 +730,7 @@ rnTyClDecl tydecl@(TySynonym {tcdLName = name,
else lookupLocatedTopBndrRn name
; typats' <- rnTyPats syn_doc typatsMaybe
; (ty', fvs) <- rnHsTypeFVs syn_doc ty
; returnM (TySynonym {tcdLName = name', tcdTyVars = tyvars',
; return (TySynonym {tcdLName = name', tcdTyVars = tyvars',
tcdTyPats = typats', tcdSynRhs = ty'},
delFVs (map hsLTyVarName tyvars') $
fvs `plusFV`
......@@ -868,7 +857,7 @@ rnTyPats doc (Just typats) = liftM Just $ rnLHsTypes doc typats
rnConDecls :: Name -> [LConDecl RdrName] -> RnM [LConDecl Name]
rnConDecls _tycon condecls
= mappM (wrapLocM rnConDecl) condecls
= mapM (wrapLocM rnConDecl) condecls
rnConDecl :: ConDecl RdrName -> RnM (ConDecl Name)
rnConDecl (ConDecl name expl tvs cxt details res_ty mb_doc)
......@@ -921,16 +910,16 @@ rnConDeclDetails :: SDoc
-> HsConDetails (LHsType RdrName) [ConDeclField RdrName]
-> RnM (HsConDetails (LHsType Name) [ConDeclField Name])
rnConDeclDetails doc (PrefixCon tys)
= mappM (rnLHsType doc) tys `thenM` \ new_tys ->
returnM (PrefixCon new_tys)
= mapM (rnLHsType doc) tys `thenM` \ new_tys ->
return (PrefixCon new_tys)
rnConDeclDetails doc (InfixCon ty1 ty2)
= rnLHsType doc ty1 `thenM` \ new_ty1 ->
rnLHsType doc ty2 `thenM` \ new_ty2 ->
returnM (InfixCon new_ty1 new_ty2)
return (InfixCon new_ty1 new_ty2)
rnConDeclDetails doc (RecCon fields)
= do { new_fields <- mappM (rnField doc) fields
= do { new_fields <- mapM (rnField doc) fields
-- No need to check for duplicate fields
-- since that is done by RnNames.extendGlobalRdrEnvRn
; return (RecCon new_fields) }
......@@ -940,7 +929,7 @@ rnField doc (ConDeclField name ty haddock_doc)
= lookupLocatedTopBndrRn name `thenM` \ new_name ->
rnLHsType doc ty `thenM` \ new_ty ->
rnMbLHsDoc haddock_doc `thenM` \ new_haddock_doc ->
returnM (ConDeclField new_name new_ty new_haddock_doc)
return (ConDeclField new_name new_ty new_haddock_doc)
-- Rename family declarations
--
......@@ -961,7 +950,7 @@ rnFamily (tydecl@TyFamily {tcdFlavour = flavour,
|| not (null tyvars)) $ addErr needOneIdx -- no. of indexes >= 1
; bindIdxVars (family_doc tycon) tyvars $ \tyvars' -> do {
; tycon' <- lookupLocatedTopBndrRn tycon
; returnM (TyFamily {tcdFlavour = flavour, tcdLName = tycon',
; return (TyFamily {tcdFlavour = flavour, tcdLName = tycon',
tcdTyVars = tyvars', tcdKind = tcdKind tydecl},
emptyFVs)
} }
......@@ -992,7 +981,7 @@ rnATs ats = mapFvRn (wrapLocFstM rn_at) ats
lookupIdxVars _ tyvars cont =
do { checkForDups tyvars;
; tyvars' <- mappM lookupIdxVar tyvars
; tyvars' <- mapM lookupIdxVar tyvars
; cont tyvars'
}
-- Type index variables must be class parameters, which are the only
......@@ -1078,7 +1067,7 @@ extendRecordFieldEnv tycl_decls inst_decls
get_con (ConDecl { con_name = con, con_details = RecCon flds })
(RecFields env fld_set)
= do { con' <- lookup con
; flds' <- mappM lookup (map cd_fld_name flds)
; flds' <- mapM lookup (map cd_fld_name flds)
; let env' = extendNameEnv env con' flds'
fld_set' = addListToNameSet fld_set flds'
; return $ (RecFields env' fld_set') }
......@@ -1095,15 +1084,15 @@ extendRecordFieldEnv tycl_decls inst_decls
rnFds :: SDoc -> [Located (FunDep RdrName)] -> RnM [Located (FunDep Name)]
rnFds doc fds
= mappM (wrapLocM rn_fds) fds
= mapM (wrapLocM rn_fds) fds
where
rn_fds (tys1, tys2)
= rnHsTyVars doc tys1 `thenM` \ tys1' ->
rnHsTyVars doc tys2 `thenM` \ tys2' ->
returnM (tys1', tys2')
return (tys1', tys2')
rnHsTyVars :: SDoc -> [RdrName] -> RnM [Name]
rnHsTyVars doc tvs = mappM (rnHsTyVar doc) tvs
rnHsTyVars doc tvs = mapM (rnHsTyVar doc) tvs
rnHsTyVar :: SDoc -> RdrName -> RnM Name
rnHsTyVar _doc tyvar = lookupOccRn tyvar
......@@ -1154,7 +1143,7 @@ rnSplice (HsSplice n expr)
checkTH :: Outputable a => a -> String -> RnM ()
#ifdef GHCI
checkTH _ _ = returnM () -- OK
checkTH _ _ = return () -- OK
#else
checkTH e what -- Raise an error in a stage-1 compiler
= addErr (vcat [ptext (sLit "Template Haskell") <+> text what <+>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment