2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[RnSource]{Main pass of renamer}
7 module RnSource ( rnTyClDecl, rnIfaceRuleDecl, rnInstDecl, rnSourceDecls,
8 rnHsType, rnHsSigType, rnHsTypeFVs, rnHsSigTypeFVs
11 #include "HsVersions.h"
15 import HscTypes ( GlobalRdrEnv )
16 import HsTypes ( hsTyVarNames, pprHsContext )
17 import RdrName ( RdrName, isRdrDataCon, rdrNameOcc, elemRdrEnv )
18 import RdrHsSyn ( RdrNameContext, RdrNameHsType, RdrNameConDecl, RdrNameTyClDecl,
19 extractRuleBndrsTyVars, extractHsTyRdrTyVars,
20 extractHsCtxtRdrTyVars, extractGenericPatTyVars
25 import RnBinds ( rnTopBinds, rnMethodBinds, renameSigs, renameSigsFVs )
26 import RnEnv ( lookupTopBndrRn, lookupOccRn, newIPName, lookupIfaceName,
27 lookupOrigNames, lookupSysBinder, newLocalsRn,
29 bindTyVarsRn, bindTyVars2Rn,
30 bindTyVarsFV2Rn, extendTyVarEnvFVRn,
31 bindCoreLocalRn, bindCoreLocalsRn, bindLocalNames,
32 checkDupOrQualNames, checkDupNames, mapFvRn
36 import Class ( FunDep, DefMeth (..) )
37 import DataCon ( dataConId )
38 import Name ( Name, OccName, nameOccName, NamedThing(..) )
40 import PrelInfo ( derivableClassKeys, cCallishClassKeys )
41 import PrelNames ( deRefStablePtr_RDR, newStablePtr_RDR,
42 bindIO_RDR, returnIO_RDR
44 import TysWiredIn ( tupleCon )
45 import List ( partition, nub )
47 import SrcLoc ( SrcLoc )
48 import CmdLineOpts ( DynFlag(..) )
49 -- Warn of unused for-all'd tyvars
50 import Unique ( Uniquable(..) )
51 import ErrUtils ( Message )
52 import CStrings ( isCLabelString )
53 import ListSetOps ( removeDupsEq )
56 @rnSourceDecl@ `renames' declarations.
57 It simultaneously performs dependency analysis and precedence parsing.
58 It also does the following error checks:
61 Checks that tyvars are used properly. This includes checking
62 for undefined tyvars, and tyvars in contexts that are ambiguous.
63 (Some of this checking has now been moved to module @TcMonoType@,
64 since we don't have functional dependency information at this point.)
66 Checks that all variable occurences are defined.
68 Checks the @(..)@ etc constraints in the export list.
72 %*********************************************************
74 \subsection{Value declarations}
76 %*********************************************************
79 rnSourceDecls :: GlobalRdrEnv -> LocalFixityEnv
81 -> RnMG ([RenamedHsDecl], FreeVars)
82 -- The decls get reversed, but that's ok
84 rnSourceDecls gbl_env local_fixity_env decls
85 = initRnMS gbl_env local_fixity_env SourceMode (go emptyFVs [] decls)
87 -- Fixity and deprecations have been dealt with already; ignore them
88 go fvs ds' [] = returnRn (ds', fvs)
89 go fvs ds' (FixD _:ds) = go fvs ds' ds
90 go fvs ds' (DeprecD _:ds) = go fvs ds' ds
91 go fvs ds' (d:ds) = rnSourceDecl d `thenRn` \(d', fvs') ->
92 go (fvs `plusFV` fvs') (d':ds') ds
96 %*********************************************************
98 \subsection{Value declarations}
100 %*********************************************************
103 -- rnSourceDecl does all the work
104 rnSourceDecl :: RdrNameHsDecl -> RnMS (RenamedHsDecl, FreeVars)
106 rnSourceDecl (ValD binds) = rnTopBinds binds `thenRn` \ (new_binds, fvs) ->
107 returnRn (ValD new_binds, fvs)
109 rnSourceDecl (TyClD tycl_decl)
110 = rnTyClDecl tycl_decl `thenRn` \ new_decl ->
111 rnClassBinds tycl_decl new_decl `thenRn` \ (new_decl', fvs) ->
112 traceRn (text "rnClassDecl:" <+> (ppr (nameSetToList (tyClDeclFVs new_decl')) $$
113 ppr (nameSetToList fvs))) `thenRn_`
114 returnRn (TyClD new_decl', fvs `plusFV` tyClDeclFVs new_decl')
116 rnSourceDecl (InstD inst)
117 = rnInstDecl inst `thenRn` \ new_inst ->
118 rnInstBinds inst new_inst `thenRn` \ (new_inst', fvs) ->
119 returnRn (InstD new_inst', fvs `plusFV` instDeclFVs new_inst')
121 rnSourceDecl (RuleD rule)
122 = rnHsRuleDecl rule `thenRn` \ (new_rule, fvs) ->
123 returnRn (RuleD new_rule, fvs)
125 rnSourceDecl (DefD (DefaultDecl tys src_loc))
126 = pushSrcLocRn src_loc $
127 mapFvRn (rnHsTypeFVs doc_str) tys `thenRn` \ (tys', fvs) ->
128 returnRn (DefD (DefaultDecl tys' src_loc), fvs)
130 doc_str = text "a `default' declaration"
132 rnSourceDecl (ForD (ForeignDecl name imp_exp ty ext_nm cconv src_loc))
133 = pushSrcLocRn src_loc $
134 lookupOccRn name `thenRn` \ name' ->
137 | isDyn = lookupOrigNames [newStablePtr_RDR, deRefStablePtr_RDR,
138 bindIO_RDR, returnIO_RDR]
140 lookupOrigNames [bindIO_RDR, returnIO_RDR] `thenRn` \ fvs ->
141 returnRn (addOneFV fvs name')
142 extra_fvs other = returnRn emptyFVs
144 checkRn (ok_ext_nm ext_nm) (badExtName ext_nm) `thenRn_`
146 extra_fvs imp_exp `thenRn` \ fvs1 ->
148 rnHsTypeFVs fo_decl_msg ty `thenRn` \ (ty', fvs2) ->
149 returnRn (ForD (ForeignDecl name' imp_exp ty' ext_nm cconv src_loc),
152 fo_decl_msg = ptext SLIT("The foreign declaration for") <+> ppr name
153 isDyn = isDynamicExtName ext_nm
155 ok_ext_nm Dynamic = True
156 ok_ext_nm (ExtName nm (Just mb)) = isCLabelString nm && isCLabelString mb
157 ok_ext_nm (ExtName nm Nothing) = isCLabelString nm
161 %*********************************************************
163 \subsection{Instance declarations}
165 %*********************************************************
168 rnInstDecl (InstDecl inst_ty mbinds uprags maybe_dfun_rdr_name src_loc)
169 = pushSrcLocRn src_loc $
170 rnHsSigType (text "an instance decl") inst_ty `thenRn` \ inst_ty' ->
172 (case maybe_dfun_rdr_name of
173 Nothing -> returnRn Nothing
174 Just dfun_rdr_name -> lookupIfaceName dfun_rdr_name `thenRn` \ dfun_name ->
175 returnRn (Just dfun_name)
176 ) `thenRn` \ maybe_dfun_name ->
178 -- The typechecker checks that all the bindings are for the right class.
179 returnRn (InstDecl inst_ty' EmptyMonoBinds [] maybe_dfun_name src_loc)
181 -- Compare rnClassBinds
182 rnInstBinds (InstDecl _ mbinds uprags _ _ )
183 (InstDecl inst_ty _ _ maybe_dfun_rdr_name src_loc)
185 meth_doc = text "the bindings in an instance declaration"
186 meth_names = collectLocatedMonoBinders mbinds
187 inst_tyvars = case inst_ty of
188 HsForAllTy (Just inst_tyvars) _ _ -> inst_tyvars
190 -- (Slightly strangely) the forall-d tyvars scope over
191 -- the method bindings too
194 -- Rename the bindings
195 -- NB meth_names can be qualified!
196 checkDupNames meth_doc meth_names `thenRn_`
197 extendTyVarEnvFVRn (map hsTyVarName inst_tyvars) (
198 rnMethodBinds [] mbinds
199 ) `thenRn` \ (mbinds', meth_fvs) ->
201 binders = collectMonoBinders mbinds'
202 binder_set = mkNameSet binders
204 -- Rename the prags and signatures.
205 -- Note that the type variables are not in scope here,
206 -- so that instance Eq a => Eq (T a) where
207 -- {-# SPECIALISE instance Eq a => Eq (T [a]) #-}
210 -- But the (unqualified) method names are in scope
211 bindLocalNames binders (
212 renameSigsFVs (okInstDclSig binder_set) uprags
213 ) `thenRn` \ (uprags', prag_fvs) ->
215 returnRn (InstDecl inst_ty mbinds' uprags' maybe_dfun_rdr_name src_loc,
216 meth_fvs `plusFV` prag_fvs)
219 %*********************************************************
223 %*********************************************************
226 rnIfaceRuleDecl (IfaceRule rule_name vars fn args rhs src_loc)
227 = pushSrcLocRn src_loc $
228 lookupOccRn fn `thenRn` \ fn' ->
229 rnCoreBndrs vars $ \ vars' ->
230 mapRn rnCoreExpr args `thenRn` \ args' ->
231 rnCoreExpr rhs `thenRn` \ rhs' ->
232 returnRn (IfaceRule rule_name vars' fn' args' rhs' src_loc)
234 rnHsRuleDecl (HsRule rule_name tvs vars lhs rhs src_loc)
236 pushSrcLocRn src_loc $
238 bindTyVarsFV2Rn doc (map UserTyVar sig_tvs) $ \ sig_tvs' _ ->
239 bindLocalsFVRn doc (map get_var vars) $ \ ids ->
240 mapFvRn rn_var (vars `zip` ids) `thenRn` \ (vars', fv_vars) ->
242 rnExpr lhs `thenRn` \ (lhs', fv_lhs) ->
243 rnExpr rhs `thenRn` \ (rhs', fv_rhs) ->
244 checkRn (validRuleLhs ids lhs')
245 (badRuleLhsErr rule_name lhs') `thenRn_`
247 bad_vars = [var | var <- ids, not (var `elemNameSet` fv_lhs)]
249 mapRn (addErrRn . badRuleVar rule_name) bad_vars `thenRn_`
250 returnRn (HsRule rule_name sig_tvs' vars' lhs' rhs' src_loc,
251 fv_vars `plusFV` fv_lhs `plusFV` fv_rhs)
253 doc = text "the transformation rule" <+> ptext rule_name
254 sig_tvs = extractRuleBndrsTyVars vars
256 get_var (RuleBndr v) = v
257 get_var (RuleBndrSig v _) = v
259 rn_var (RuleBndr v, id) = returnRn (RuleBndr id, emptyFVs)
260 rn_var (RuleBndrSig v t, id) = rnHsTypeFVs doc t `thenRn` \ (t', fvs) ->
261 returnRn (RuleBndrSig id t', fvs)
265 %*********************************************************
267 \subsection{Type, class and iface sig declarations}
269 %*********************************************************
271 @rnTyDecl@ uses the `global name function' to create a new type
272 declaration in which local names have been replaced by their original
273 names, reporting any unknown names.
275 Renaming type variables is a pain. Because they now contain uniques,
276 it is necessary to pass in an association list which maps a parsed
277 tyvar to its @Name@ representation.
278 In some cases (type signatures of values),
279 it is even necessary to go over the type first
280 in order to get the set of tyvars used by it, make an assoc list,
281 and then go over it again to rename the tyvars!
282 However, we can also do some scoping checks at the same time.
285 rnTyClDecl (IfaceSig {tcdName = name, tcdType = ty, tcdIdInfo = id_infos, tcdLoc = loc})
287 lookupTopBndrRn name `thenRn` \ name' ->
288 rnHsType doc_str ty `thenRn` \ ty' ->
289 mapRn rnIdInfo id_infos `thenRn` \ id_infos' ->
290 returnRn (IfaceSig {tcdName = name', tcdType = ty', tcdIdInfo = id_infos', tcdLoc = loc})
292 doc_str = text "the interface signature for" <+> quotes (ppr name)
294 rnTyClDecl (TyData {tcdND = new_or_data, tcdCtxt = context, tcdName = tycon,
295 tcdTyVars = tyvars, tcdCons = condecls, tcdNCons = nconstrs,
296 tcdDerivs = derivings, tcdLoc = src_loc, tcdSysNames = sys_names})
297 = pushSrcLocRn src_loc $
298 lookupTopBndrRn tycon `thenRn` \ tycon' ->
299 bindTyVarsRn data_doc tyvars $ \ tyvars' ->
300 rnContext data_doc context `thenRn` \ context' ->
301 checkDupOrQualNames data_doc con_names `thenRn_`
302 mapRn rnConDecl condecls `thenRn` \ condecls' ->
303 mapRn lookupSysBinder sys_names `thenRn` \ sys_names' ->
304 rnDerivs derivings `thenRn` \ derivings' ->
305 returnRn (TyData {tcdND = new_or_data, tcdCtxt = context', tcdName = tycon',
306 tcdTyVars = tyvars', tcdCons = condecls', tcdNCons = nconstrs,
307 tcdDerivs = derivings', tcdLoc = src_loc, tcdSysNames = sys_names'})
309 data_doc = text "the data type declaration for" <+> quotes (ppr tycon)
310 con_names = map conDeclName condecls
312 rnTyClDecl (TySynonym {tcdName = name, tcdTyVars = tyvars, tcdSynRhs = ty, tcdLoc = src_loc})
313 = pushSrcLocRn src_loc $
314 doptRn Opt_GlasgowExts `thenRn` \ glaExts ->
315 lookupTopBndrRn name `thenRn` \ name' ->
316 bindTyVarsRn syn_doc tyvars $ \ tyvars' ->
317 rnHsType syn_doc (unquantify glaExts ty) `thenRn` \ ty' ->
318 returnRn (TySynonym {tcdName = name', tcdTyVars = tyvars', tcdSynRhs = ty', tcdLoc = src_loc})
320 syn_doc = text "the declaration for type synonym" <+> quotes (ppr name)
322 -- For H98 we do *not* universally quantify on the RHS of a synonym
323 -- Silently discard context... but the tyvars in the rest won't be in scope
324 -- In interface files all types are quantified, so this is a no-op
325 unquantify glaExts (HsForAllTy Nothing ctxt ty) | glaExts = ty
326 unquantify glaExys ty = ty
328 rnTyClDecl (ClassDecl {tcdCtxt = context, tcdName = cname,
329 tcdTyVars = tyvars, tcdFDs = fds, tcdSigs = sigs,
330 tcdSysNames = names, tcdLoc = src_loc})
331 = pushSrcLocRn src_loc $
333 lookupTopBndrRn cname `thenRn` \ cname' ->
335 -- Deal with the implicit tycon and datacon name
336 -- They aren't in scope (because they aren't visible to the user)
337 -- and what we want to do is simply look them up in the cache;
338 -- we jolly well ought to get a 'hit' there!
339 mapRn lookupSysBinder names `thenRn` \ names' ->
341 -- Tyvars scope over bindings and context
342 bindTyVars2Rn cls_doc tyvars $ \ clas_tyvar_names tyvars' ->
344 -- Check the superclasses
345 rnContext cls_doc context `thenRn` \ context' ->
347 -- Check the functional dependencies
348 rnFds cls_doc fds `thenRn` \ fds' ->
350 -- Check the signatures
351 -- First process the class op sigs (op_sigs), then the fixity sigs (non_op_sigs).
353 (op_sigs, non_op_sigs) = partition isClassOpSig sigs
354 sig_rdr_names_w_locs = [(op,locn) | ClassOpSig op _ _ locn <- sigs]
356 checkDupOrQualNames sig_doc sig_rdr_names_w_locs `thenRn_`
357 mapRn (rnClassOp cname' clas_tyvar_names fds') op_sigs `thenRn` \ sigs' ->
359 binders = mkNameSet [ nm | (ClassOpSig nm _ _ _) <- sigs' ]
361 renameSigs (okClsDclSig binders) non_op_sigs `thenRn` \ non_ops' ->
363 -- Typechecker is responsible for checking that we only
364 -- give default-method bindings for things in this class.
365 -- The renamer *could* check this for class decls, but can't
366 -- for instance decls.
368 returnRn (ClassDecl { tcdCtxt = context', tcdName = cname', tcdTyVars = tyvars',
369 tcdFDs = fds', tcdSigs = non_ops' ++ sigs', tcdMeths = Nothing,
370 tcdSysNames = names', tcdLoc = src_loc})
372 cls_doc = text "the declaration for class" <+> ppr cname
373 sig_doc = text "the signatures for class" <+> ppr cname
375 rnClassOp clas clas_tyvars clas_fds sig@(ClassOpSig op dm_stuff ty locn)
376 = pushSrcLocRn locn $
377 lookupTopBndrRn op `thenRn` \ op_name ->
379 -- Check the signature
380 rnHsSigType (quotes (ppr op)) ty `thenRn` \ new_ty ->
382 -- Make the default-method name
385 -> -- Imported class that has a default method decl
386 -- See comments with tname, snames, above
387 lookupSysBinder dm_rdr_name `thenRn` \ dm_name ->
388 returnRn (DefMeth dm_name)
389 -- An imported class decl for a class decl that had an explicit default
390 -- method, mentions, rather than defines,
391 -- the default method, so we must arrange to pull it in
393 GenDefMeth -> returnRn GenDefMeth
394 NoDefMeth -> returnRn NoDefMeth
395 ) `thenRn` \ dm_stuff' ->
397 returnRn (ClassOpSig op_name dm_stuff' new_ty locn)
399 rnClassBinds :: RdrNameTyClDecl -> RenamedTyClDecl -> RnMS (RenamedTyClDecl, FreeVars)
400 rnClassBinds (ClassDecl {tcdMeths = Just mbinds}) -- Get mbinds from here
401 rn_cls_decl@(ClassDecl {tcdTyVars = tyvars, tcdLoc = src_loc}) -- Everything else is here
402 -- There are some default-method bindings (abeit possibly empty) so
403 -- this is a source-code class declaration
404 = -- The newLocals call is tiresome: given a generic class decl
407 -- op {| x+y |} (Inl a) = ...
408 -- op {| x+y |} (Inr b) = ...
409 -- op {| a*b |} (a*b) = ...
410 -- we want to name both "x" tyvars with the same unique, so that they are
411 -- easy to group together in the typechecker.
413 extendTyVarEnvFVRn (map hsTyVarName tyvars) $
414 getLocalNameEnv `thenRn` \ name_env ->
416 meth_rdr_names_w_locs = collectLocatedMonoBinders mbinds
417 gen_rdr_tyvars_w_locs = [(tv,src_loc) | tv <- extractGenericPatTyVars mbinds,
418 not (tv `elemRdrEnv` name_env)]
420 checkDupOrQualNames meth_doc meth_rdr_names_w_locs `thenRn_`
421 newLocalsRn gen_rdr_tyvars_w_locs `thenRn` \ gen_tyvars ->
422 rnMethodBinds gen_tyvars mbinds `thenRn` \ (mbinds', meth_fvs) ->
423 returnRn (rn_cls_decl {tcdMeths = Just mbinds'}, meth_fvs)
425 meth_doc = text "the default-methods for class" <+> ppr (tcdName rn_cls_decl)
427 rnClassBinds _ tycl_decl = returnRn (tycl_decl, emptyFVs)
428 -- Not a class declaration
432 %*********************************************************
434 \subsection{Support code for type/data declarations}
436 %*********************************************************
439 rnDerivs :: Maybe [RdrName] -> RnMS (Maybe [Name])
441 rnDerivs Nothing -- derivs not specified
445 = mapRn do_one clss `thenRn` \ clss' ->
446 returnRn (Just clss')
448 do_one cls = lookupOccRn cls `thenRn` \ clas_name ->
449 checkRn (getUnique clas_name `elem` derivableClassKeys)
450 (derivingNonStdClassErr clas_name) `thenRn_`
455 conDeclName :: RdrNameConDecl -> (RdrName, SrcLoc)
456 conDeclName (ConDecl n _ _ _ _ l) = (n,l)
458 rnConDecl :: RdrNameConDecl -> RnMS RenamedConDecl
459 rnConDecl (ConDecl name wkr tvs cxt details locn)
460 = pushSrcLocRn locn $
461 checkConName name `thenRn_`
462 lookupTopBndrRn name `thenRn` \ new_name ->
464 lookupSysBinder wkr `thenRn` \ new_wkr ->
465 -- See comments with ClassDecl
467 bindTyVarsRn doc tvs $ \ new_tyvars ->
468 rnContext doc cxt `thenRn` \ new_context ->
469 rnConDetails doc locn details `thenRn` \ new_details ->
470 returnRn (ConDecl new_name new_wkr new_tyvars new_context new_details locn)
472 doc = text "the definition of data constructor" <+> quotes (ppr name)
474 rnConDetails doc locn (VanillaCon tys)
475 = mapRn (rnBangTy doc) tys `thenRn` \ new_tys ->
476 returnRn (VanillaCon new_tys)
478 rnConDetails doc locn (InfixCon ty1 ty2)
479 = rnBangTy doc ty1 `thenRn` \ new_ty1 ->
480 rnBangTy doc ty2 `thenRn` \ new_ty2 ->
481 returnRn (InfixCon new_ty1 new_ty2)
483 rnConDetails doc locn (RecCon fields)
484 = checkDupOrQualNames doc field_names `thenRn_`
485 mapRn (rnField doc) fields `thenRn` \ new_fields ->
486 returnRn (RecCon new_fields)
488 field_names = [(fld, locn) | (flds, _) <- fields, fld <- flds]
490 rnField doc (names, ty)
491 = mapRn lookupTopBndrRn names `thenRn` \ new_names ->
492 rnBangTy doc ty `thenRn` \ new_ty ->
493 returnRn (new_names, new_ty)
495 rnBangTy doc (Banged ty)
496 = rnHsType doc ty `thenRn` \ new_ty ->
497 returnRn (Banged new_ty)
499 rnBangTy doc (Unbanged ty)
500 = rnHsType doc ty `thenRn` \ new_ty ->
501 returnRn (Unbanged new_ty)
503 rnBangTy doc (Unpacked ty)
504 = rnHsType doc ty `thenRn` \ new_ty ->
505 returnRn (Unpacked new_ty)
507 -- This data decl will parse OK
509 -- treating "a" as the constructor.
510 -- It is really hard to make the parser spot this malformation.
511 -- So the renamer has to check that the constructor is legal
513 -- We can get an operator as the constructor, even in the prefix form:
514 -- data T = :% Int Int
515 -- from interface files, which always print in prefix form
518 = checkRn (isRdrDataCon name)
523 %*********************************************************
525 \subsection{Support code to rename types}
527 %*********************************************************
530 rnHsTypeFVs :: SDoc -> RdrNameHsType -> RnMS (RenamedHsType, FreeVars)
531 rnHsTypeFVs doc_str ty
532 = rnHsType doc_str ty `thenRn` \ ty' ->
533 returnRn (ty', extractHsTyNames ty')
535 rnHsSigTypeFVs :: SDoc -> RdrNameHsType -> RnMS (RenamedHsType, FreeVars)
536 rnHsSigTypeFVs doc_str ty
537 = rnHsSigType doc_str ty `thenRn` \ ty' ->
538 returnRn (ty', extractHsTyNames ty')
540 rnHsSigType :: SDoc -> RdrNameHsType -> RnMS RenamedHsType
541 -- rnHsSigType is used for source-language type signatures,
542 -- which use *implicit* universal quantification.
543 rnHsSigType doc_str ty
544 = rnHsType (text "the type signature for" <+> doc_str) ty
546 ---------------------------------------
547 rnHsType :: SDoc -> RdrNameHsType -> RnMS RenamedHsType
549 rnHsType doc (HsForAllTy Nothing ctxt ty)
550 -- Implicit quantifiction in source code (no kinds on tyvars)
551 -- Given the signature C => T we universally quantify
552 -- over FV(T) \ {in-scope-tyvars}
553 = getLocalNameEnv `thenRn` \ name_env ->
555 mentioned_in_tau = extractHsTyRdrTyVars ty
556 mentioned_in_ctxt = extractHsCtxtRdrTyVars ctxt
557 mentioned = nub (mentioned_in_tau ++ mentioned_in_ctxt)
558 forall_tyvars = filter (not . (`elemRdrEnv` name_env)) mentioned
560 rnForAll doc (map UserTyVar forall_tyvars) ctxt ty
562 rnHsType doc (HsForAllTy (Just forall_tyvars) ctxt tau)
563 -- Explicit quantification.
564 -- Check that the forall'd tyvars are actually
565 -- mentioned in the type, and produce a warning if not
567 mentioned_in_tau = extractHsTyRdrTyVars tau
568 mentioned_in_ctxt = extractHsCtxtRdrTyVars ctxt
569 mentioned = nub (mentioned_in_tau ++ mentioned_in_ctxt)
570 forall_tyvar_names = hsTyVarNames forall_tyvars
572 -- Explicitly quantified but not mentioned in ctxt or tau
573 warn_guys = filter (`notElem` mentioned) forall_tyvar_names
575 mapRn_ (forAllWarn doc tau) warn_guys `thenRn_`
576 rnForAll doc forall_tyvars ctxt tau
578 rnHsType doc (HsTyVar tyvar)
579 = lookupOccRn tyvar `thenRn` \ tyvar' ->
580 returnRn (HsTyVar tyvar')
582 rnHsType doc (HsOpTy ty1 opname ty2)
583 = lookupOccRn opname `thenRn` \ name' ->
584 rnHsType doc ty1 `thenRn` \ ty1' ->
585 rnHsType doc ty2 `thenRn` \ ty2' ->
586 returnRn (HsOpTy ty1' name' ty2')
588 rnHsType doc (HsNumTy i)
589 | i == 1 = returnRn (HsNumTy i)
590 | otherwise = failWithRn (HsNumTy i)
591 (ptext SLIT("Only unit numeric type pattern is valid"))
593 rnHsType doc (HsFunTy ty1 ty2)
594 = rnHsType doc ty1 `thenRn` \ ty1' ->
595 -- Might find a for-all as the arg of a function type
596 rnHsType doc ty2 `thenRn` \ ty2' ->
597 -- Or as the result. This happens when reading Prelude.hi
598 -- when we find return :: forall m. Monad m -> forall a. a -> m a
599 returnRn (HsFunTy ty1' ty2')
601 rnHsType doc (HsListTy ty)
602 = rnHsType doc ty `thenRn` \ ty' ->
603 returnRn (HsListTy ty')
605 -- Unboxed tuples are allowed to have poly-typed arguments. These
606 -- sometimes crop up as a result of CPR worker-wrappering dictionaries.
607 rnHsType doc (HsTupleTy (HsTupCon _ boxity arity) tys)
608 -- Don't do lookupOccRn, because this is built-in syntax
609 -- so it doesn't need to be in scope
610 = mapRn (rnHsType doc) tys `thenRn` \ tys' ->
611 returnRn (HsTupleTy (HsTupCon tup_name boxity arity) tys')
613 tup_name = tupleTyCon_name boxity arity
616 rnHsType doc (HsAppTy ty1 ty2)
617 = rnHsType doc ty1 `thenRn` \ ty1' ->
618 rnHsType doc ty2 `thenRn` \ ty2' ->
619 returnRn (HsAppTy ty1' ty2')
621 rnHsType doc (HsPredTy pred)
622 = rnPred doc pred `thenRn` \ pred' ->
623 returnRn (HsPredTy pred')
625 rnHsTypes doc tys = mapRn (rnHsType doc) tys
629 rnForAll doc forall_tyvars ctxt ty
630 = bindTyVarsRn doc forall_tyvars $ \ new_tyvars ->
631 rnContext doc ctxt `thenRn` \ new_ctxt ->
632 rnHsType doc ty `thenRn` \ new_ty ->
633 returnRn (mkHsForAllTy (Just new_tyvars) new_ctxt new_ty)
637 rnContext :: SDoc -> RdrNameContext -> RnMS RenamedContext
639 = mapRn rn_pred ctxt `thenRn` \ theta ->
641 (_, dups) = removeDupsEq theta
642 -- We only have equality, not ordering
644 -- Check for duplicate assertions
645 -- If this isn't an error, then it ought to be:
646 mapRn (addWarnRn . dupClassAssertWarn theta) dups `thenRn_`
649 --Someone discovered that @CCallable@ and @CReturnable@
650 -- could be used in contexts such as:
651 -- foo :: CCallable a => a -> PrimIO Int
652 -- Doing this utterly wrecks the whole point of introducing these
653 -- classes so we specifically check that this isn't being done.
654 rn_pred pred = rnPred doc pred `thenRn` \ pred'->
655 checkRn (not (bad_pred pred'))
656 (naughtyCCallContextErr pred') `thenRn_`
659 bad_pred (HsPClass clas _) = getUnique clas `elem` cCallishClassKeys
660 bad_pred other = False
663 rnPred doc (HsPClass clas tys)
664 = lookupOccRn clas `thenRn` \ clas_name ->
665 rnHsTypes doc tys `thenRn` \ tys' ->
666 returnRn (HsPClass clas_name tys')
668 rnPred doc (HsPIParam n ty)
669 = newIPName n `thenRn` \ name ->
670 rnHsType doc ty `thenRn` \ ty' ->
671 returnRn (HsPIParam name ty')
675 rnFds :: SDoc -> [FunDep RdrName] -> RnMS [FunDep Name]
681 = rnHsTyVars doc tys1 `thenRn` \ tys1' ->
682 rnHsTyVars doc tys2 `thenRn` \ tys2' ->
683 returnRn (tys1', tys2')
685 rnHsTyVars doc tvs = mapRn (rnHsTyvar doc) tvs
686 rnHsTyvar doc tyvar = lookupOccRn tyvar
689 %*********************************************************
693 %*********************************************************
696 rnIdInfo (HsWorker worker)
697 = lookupOccRn worker `thenRn` \ worker' ->
698 returnRn (HsWorker worker')
700 rnIdInfo (HsUnfold inline expr) = rnCoreExpr expr `thenRn` \ expr' ->
701 returnRn (HsUnfold inline expr')
702 rnIdInfo (HsStrictness str) = returnRn (HsStrictness str)
703 rnIdInfo (HsArity arity) = returnRn (HsArity arity)
704 rnIdInfo HsNoCafRefs = returnRn HsNoCafRefs
705 rnIdInfo HsCprInfo = returnRn HsCprInfo
708 @UfCore@ expressions.
711 rnCoreExpr (UfType ty)
712 = rnHsType (text "unfolding type") ty `thenRn` \ ty' ->
713 returnRn (UfType ty')
716 = lookupOccRn v `thenRn` \ v' ->
722 rnCoreExpr (UfLitLit l ty)
723 = rnHsType (text "litlit") ty `thenRn` \ ty' ->
724 returnRn (UfLitLit l ty')
726 rnCoreExpr (UfCCall cc ty)
727 = rnHsType (text "ccall") ty `thenRn` \ ty' ->
728 returnRn (UfCCall cc ty')
730 rnCoreExpr (UfTuple (HsTupCon _ boxity arity) args)
731 = mapRn rnCoreExpr args `thenRn` \ args' ->
732 returnRn (UfTuple (HsTupCon tup_name boxity arity) args')
734 tup_name = getName (dataConId (tupleCon boxity arity))
735 -- Get the *worker* name and use that
737 rnCoreExpr (UfApp fun arg)
738 = rnCoreExpr fun `thenRn` \ fun' ->
739 rnCoreExpr arg `thenRn` \ arg' ->
740 returnRn (UfApp fun' arg')
742 rnCoreExpr (UfCase scrut bndr alts)
743 = rnCoreExpr scrut `thenRn` \ scrut' ->
744 bindCoreLocalRn bndr $ \ bndr' ->
745 mapRn rnCoreAlt alts `thenRn` \ alts' ->
746 returnRn (UfCase scrut' bndr' alts')
748 rnCoreExpr (UfNote note expr)
749 = rnNote note `thenRn` \ note' ->
750 rnCoreExpr expr `thenRn` \ expr' ->
751 returnRn (UfNote note' expr')
753 rnCoreExpr (UfLam bndr body)
754 = rnCoreBndr bndr $ \ bndr' ->
755 rnCoreExpr body `thenRn` \ body' ->
756 returnRn (UfLam bndr' body')
758 rnCoreExpr (UfLet (UfNonRec bndr rhs) body)
759 = rnCoreExpr rhs `thenRn` \ rhs' ->
760 rnCoreBndr bndr $ \ bndr' ->
761 rnCoreExpr body `thenRn` \ body' ->
762 returnRn (UfLet (UfNonRec bndr' rhs') body')
764 rnCoreExpr (UfLet (UfRec pairs) body)
765 = rnCoreBndrs bndrs $ \ bndrs' ->
766 mapRn rnCoreExpr rhss `thenRn` \ rhss' ->
767 rnCoreExpr body `thenRn` \ body' ->
768 returnRn (UfLet (UfRec (bndrs' `zip` rhss')) body')
770 (bndrs, rhss) = unzip pairs
774 rnCoreBndr (UfValBinder name ty) thing_inside
775 = rnHsType doc ty `thenRn` \ ty' ->
776 bindCoreLocalRn name $ \ name' ->
777 thing_inside (UfValBinder name' ty')
779 doc = text "unfolding id"
781 rnCoreBndr (UfTyBinder name kind) thing_inside
782 = bindCoreLocalRn name $ \ name' ->
783 thing_inside (UfTyBinder name' kind)
785 rnCoreBndrs [] thing_inside = thing_inside []
786 rnCoreBndrs (b:bs) thing_inside = rnCoreBndr b $ \ name' ->
787 rnCoreBndrs bs $ \ names' ->
788 thing_inside (name':names')
792 rnCoreAlt (con, bndrs, rhs)
793 = rnUfCon con `thenRn` \ con' ->
794 bindCoreLocalsRn bndrs $ \ bndrs' ->
795 rnCoreExpr rhs `thenRn` \ rhs' ->
796 returnRn (con', bndrs', rhs')
799 = rnHsType (text "unfolding coerce") ty `thenRn` \ ty' ->
800 returnRn (UfCoerce ty')
802 rnNote (UfSCC cc) = returnRn (UfSCC cc)
803 rnNote UfInlineCall = returnRn UfInlineCall
804 rnNote UfInlineMe = returnRn UfInlineMe
810 rnUfCon (UfTupleAlt (HsTupCon _ boxity arity))
811 = returnRn (UfTupleAlt (HsTupCon tup_name boxity arity))
813 tup_name = getName (tupleCon boxity arity)
815 rnUfCon (UfDataAlt con)
816 = lookupOccRn con `thenRn` \ con' ->
817 returnRn (UfDataAlt con')
819 rnUfCon (UfLitAlt lit)
820 = returnRn (UfLitAlt lit)
822 rnUfCon (UfLitLitAlt lit ty)
823 = rnHsType (text "litlit") ty `thenRn` \ ty' ->
824 returnRn (UfLitLitAlt lit ty')
827 %*********************************************************
829 \subsection{Rule shapes}
831 %*********************************************************
833 Check the shape of a transformation rule LHS. Currently
834 we only allow LHSs of the form @(f e1 .. en)@, where @f@ is
835 not one of the @forall@'d variables.
838 validRuleLhs foralls lhs
841 check (HsApp e1 e2) = check e1
842 check (HsVar v) | v `notElem` foralls = True
847 %*********************************************************
851 %*********************************************************
854 derivingNonStdClassErr clas
855 = hsep [ptext SLIT("non-standard class"), ppr clas, ptext SLIT("in deriving clause")]
858 = hsep [ptext SLIT("Illegal data constructor name"), quotes (ppr name)]
860 forAllWarn doc ty tyvar
861 = doptRn Opt_WarnUnusedMatches `thenRn` \ warn_unused -> case () of
862 () | not warn_unused -> returnRn ()
864 -> getModeRn `thenRn` \ mode ->
867 InterfaceMode -> returnRn () ; -- Don't warn of unused tyvars in interface files
868 -- unless DEBUG is on, in which case it is slightly
869 -- informative. They can arise from mkRhsTyLam,
870 #endif -- leading to (say) f :: forall a b. [b] -> [b]
873 sep [ptext SLIT("The universally quantified type variable") <+> quotes (ppr tyvar),
874 nest 4 (ptext SLIT("does not appear in the type") <+> quotes (ppr ty))]
876 (ptext SLIT("In") <+> doc)
880 badRuleLhsErr name lhs
881 = sep [ptext SLIT("Rule") <+> ptext name <> colon,
882 nest 4 (ptext SLIT("Illegal left-hand side:") <+> ppr lhs)]
884 ptext SLIT("LHS must be of form (f e1 .. en) where f is not forall'd")
887 = sep [ptext SLIT("Rule") <+> ptext name <> colon,
888 ptext SLIT("Forall'd variable") <+> quotes (ppr var) <+>
889 ptext SLIT("does not appear on left hand side")]
891 badExtName :: ExtName -> Message
893 = sep [quotes (ppr ext_nm) <+> ptext SLIT("is not a valid C identifier")]
895 dupClassAssertWarn ctxt (assertion : dups)
896 = sep [hsep [ptext SLIT("Duplicate class assertion"),
897 quotes (ppr assertion),
898 ptext SLIT("in the context:")],
899 nest 4 (pprHsContext ctxt <+> ptext SLIT("..."))]
901 naughtyCCallContextErr (HsPClass clas _)
902 = sep [ptext SLIT("Can't use class") <+> quotes (ppr clas),
903 ptext SLIT("in a context")]