2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[RnSource]{Main pass of renamer}
9 rnHsType, rnLHsType, rnLHsTypes, rnContext,
10 rnHsSigType, rnHsTypeFVs,
12 -- Patterns and literals
13 rnLPat, rnPat, rnPatsAndThen, -- Here because it's not part
14 rnLit, rnOverLit, -- of any mutual recursion
16 -- Precence related stuff
17 mkOpAppRn, mkNegAppRn, mkOpFormRn,
18 checkPrecMatch, checkSectionPrec,
21 dupFieldErr, patSigErr, checkTupSize
24 import DynFlags ( DynFlag(Opt_WarnUnusedMatches, Opt_GlasgowExts, Opt_ScopedTypeVariables, Opt_OverloadedStrings ) )
27 import RdrHsSyn ( extractHsRhoRdrTyVars )
28 import RnHsSyn ( extractHsTyNames, parrTyCon_name, tupleTyCon_name,
31 import RnHsDoc ( rnLHsDoc )
32 import RnEnv ( lookupOccRn, lookupBndrRn, lookupSyntaxName,
33 lookupLocatedOccRn, lookupLocatedBndrRn,
34 lookupLocatedGlobalOccRn, bindTyVarsRn,
35 lookupFixityRn, lookupTyFixityRn,
36 mapFvRn, warnUnusedMatches,
37 newIPNameRn, bindPatSigTyVarsFV, bindLocatedLocalsFV )
39 import RdrName ( RdrName, elemLocalRdrEnv )
40 import PrelNames ( eqClassName, integralClassName, geName, eqName,
41 negateName, minusName, lengthPName, indexPName,
42 plusIntegerName, fromIntegerName, timesIntegerName,
43 ratioDataConName, fromRationalName, fromStringName )
44 import TypeRep ( funTyCon )
45 import Constants ( mAX_TUPLE_SIZE )
47 import SrcLoc ( SrcSpan, Located(..), unLoc, noLoc, combineLocs )
50 import Literal ( inIntRange, inCharRange )
51 import BasicTypes ( compareFixity, funTyFixity, negateFixity,
52 Fixity(..), FixityDirection(..) )
53 import ListSetOps ( removeDups )
56 #include "HsVersions.h"
59 These type renamers are in a separate module, rather than in (say) RnSource,
60 to break several loop.
62 %*********************************************************
64 \subsection{Renaming types}
66 %*********************************************************
69 rnHsTypeFVs :: SDoc -> LHsType RdrName -> RnM (LHsType Name, FreeVars)
70 rnHsTypeFVs doc_str ty
71 = rnLHsType doc_str ty `thenM` \ ty' ->
72 returnM (ty', extractHsTyNames ty')
74 rnHsSigType :: SDoc -> LHsType RdrName -> RnM (LHsType Name)
75 -- rnHsSigType is used for source-language type signatures,
76 -- which use *implicit* universal quantification.
77 rnHsSigType doc_str ty
78 = rnLHsType (text "In the type signature for" <+> doc_str) ty
81 rnHsType is here because we call it from loadInstDecl, and I didn't
82 want a gratuitous knot.
85 rnLHsType :: SDoc -> LHsType RdrName -> RnM (LHsType Name)
86 rnLHsType doc = wrapLocM (rnHsType doc)
88 rnHsType :: SDoc -> HsType RdrName -> RnM (HsType Name)
90 rnHsType doc (HsForAllTy Implicit _ ctxt ty)
91 -- Implicit quantifiction in source code (no kinds on tyvars)
92 -- Given the signature C => T we universally quantify
93 -- over FV(T) \ {in-scope-tyvars}
94 = getLocalRdrEnv `thenM` \ name_env ->
96 mentioned = extractHsRhoRdrTyVars ctxt ty
98 -- Don't quantify over type variables that are in scope;
99 -- when GlasgowExts is off, there usually won't be any, except for
101 -- class C a where { op :: a -> a }
102 forall_tyvars = filter (not . (`elemLocalRdrEnv` name_env) . unLoc) mentioned
103 tyvar_bndrs = userHsTyVarBndrs forall_tyvars
105 rnForAll doc Implicit tyvar_bndrs ctxt ty
107 rnHsType doc (HsForAllTy Explicit forall_tyvars ctxt tau)
108 -- Explicit quantification.
109 -- Check that the forall'd tyvars are actually
110 -- mentioned in the type, and produce a warning if not
112 mentioned = map unLoc (extractHsRhoRdrTyVars ctxt tau)
113 forall_tyvar_names = hsLTyVarLocNames forall_tyvars
115 -- Explicitly quantified but not mentioned in ctxt or tau
116 warn_guys = filter ((`notElem` mentioned) . unLoc) forall_tyvar_names
118 mappM_ (forAllWarn doc tau) warn_guys `thenM_`
119 rnForAll doc Explicit forall_tyvars ctxt tau
121 rnHsType doc (HsTyVar tyvar)
122 = lookupOccRn tyvar `thenM` \ tyvar' ->
123 returnM (HsTyVar tyvar')
125 rnHsType doc ty@(HsOpTy ty1 (L loc op) ty2)
127 do { ty_ops_ok <- doptM Opt_ScopedTypeVariables -- Badly named option
128 ; checkErr ty_ops_ok (opTyErr op ty)
129 ; op' <- lookupOccRn op
130 ; let l_op' = L loc op'
131 ; fix <- lookupTyFixityRn l_op'
132 ; ty1' <- rnLHsType doc ty1
133 ; ty2' <- rnLHsType doc ty2
134 ; mkHsOpTyRn (\t1 t2 -> HsOpTy t1 l_op' t2) (ppr op') fix ty1' ty2' }
136 rnHsType doc (HsParTy ty)
137 = rnLHsType doc ty `thenM` \ ty' ->
138 returnM (HsParTy ty')
140 rnHsType doc (HsBangTy b ty)
141 = rnLHsType doc ty `thenM` \ ty' ->
142 returnM (HsBangTy b ty')
144 rnHsType doc (HsNumTy i)
145 | i == 1 = returnM (HsNumTy i)
146 | otherwise = addErr err_msg `thenM_` returnM (HsNumTy i)
148 err_msg = ptext SLIT("Only unit numeric type pattern is valid")
151 rnHsType doc (HsFunTy ty1 ty2)
152 = rnLHsType doc ty1 `thenM` \ ty1' ->
153 -- Might find a for-all as the arg of a function type
154 rnLHsType doc ty2 `thenM` \ ty2' ->
155 -- Or as the result. This happens when reading Prelude.hi
156 -- when we find return :: forall m. Monad m -> forall a. a -> m a
158 -- Check for fixity rearrangements
159 mkHsOpTyRn HsFunTy (ppr funTyCon) funTyFixity ty1' ty2'
161 rnHsType doc (HsListTy ty)
162 = rnLHsType doc ty `thenM` \ ty' ->
163 returnM (HsListTy ty')
165 rnHsType doc (HsKindSig ty k)
166 = rnLHsType doc ty `thenM` \ ty' ->
167 returnM (HsKindSig ty' k)
169 rnHsType doc (HsPArrTy ty)
170 = rnLHsType doc ty `thenM` \ ty' ->
171 returnM (HsPArrTy ty')
173 -- Unboxed tuples are allowed to have poly-typed arguments. These
174 -- sometimes crop up as a result of CPR worker-wrappering dictionaries.
175 rnHsType doc (HsTupleTy tup_con tys)
176 = mappM (rnLHsType doc) tys `thenM` \ tys' ->
177 returnM (HsTupleTy tup_con tys')
179 rnHsType doc (HsAppTy ty1 ty2)
180 = rnLHsType doc ty1 `thenM` \ ty1' ->
181 rnLHsType doc ty2 `thenM` \ ty2' ->
182 returnM (HsAppTy ty1' ty2')
184 rnHsType doc (HsPredTy pred)
185 = rnPred doc pred `thenM` \ pred' ->
186 returnM (HsPredTy pred')
188 rnHsType doc (HsSpliceTy _)
189 = do { addErr (ptext SLIT("Type splices are not yet implemented"))
192 rnHsType doc (HsDocTy ty haddock_doc)
193 = rnLHsType doc ty `thenM` \ ty' ->
194 rnLHsDoc haddock_doc `thenM` \ haddock_doc' ->
195 returnM (HsDocTy ty' haddock_doc')
197 rnLHsTypes doc tys = mappM (rnLHsType doc) tys
202 rnForAll :: SDoc -> HsExplicitForAll -> [LHsTyVarBndr RdrName]
203 -> LHsContext RdrName -> LHsType RdrName -> RnM (HsType Name)
205 rnForAll doc exp [] (L _ []) (L _ ty) = rnHsType doc ty
206 -- One reason for this case is that a type like Int#
207 -- starts off as (HsForAllTy Nothing [] Int), in case
208 -- there is some quantification. Now that we have quantified
209 -- and discovered there are no type variables, it's nicer to turn
210 -- it into plain Int. If it were Int# instead of Int, we'd actually
211 -- get an error, because the body of a genuine for-all is
214 rnForAll doc exp forall_tyvars ctxt ty
215 = bindTyVarsRn doc forall_tyvars $ \ new_tyvars ->
216 rnContext doc ctxt `thenM` \ new_ctxt ->
217 rnLHsType doc ty `thenM` \ new_ty ->
218 returnM (HsForAllTy exp new_tyvars new_ctxt new_ty)
219 -- Retain the same implicit/explicit flag as before
220 -- so that we can later print it correctly
224 %************************************************************************
226 Fixities and precedence parsing
228 %************************************************************************
230 @mkOpAppRn@ deals with operator fixities. The argument expressions
231 are assumed to be already correctly arranged. It needs the fixities
232 recorded in the OpApp nodes, because fixity info applies to the things
233 the programmer actually wrote, so you can't find it out from the Name.
235 Furthermore, the second argument is guaranteed not to be another
236 operator application. Why? Because the parser parses all
237 operator appications left-associatively, EXCEPT negation, which
238 we need to handle specially.
239 Infix types are read in a *right-associative* way, so that
244 mkHsOpTyRn rearranges where necessary. The two arguments
245 have already been renamed and rearranged. It's made rather tiresome
246 by the presence of ->, which is a separate syntactic construct.
250 -- Building (ty1 `op1` (ty21 `op2` ty22))
251 mkHsOpTyRn :: (LHsType Name -> LHsType Name -> HsType Name)
252 -> SDoc -> Fixity -> LHsType Name -> LHsType Name
255 mkHsOpTyRn mk1 pp_op1 fix1 ty1 (L loc2 (HsOpTy ty21 op2 ty22))
256 = do { fix2 <- lookupTyFixityRn op2
257 ; mk_hs_op_ty mk1 pp_op1 fix1 ty1
258 (\t1 t2 -> HsOpTy t1 op2 t2)
259 (ppr op2) fix2 ty21 ty22 loc2 }
261 mkHsOpTyRn mk1 pp_op1 fix1 ty1 ty2@(L loc2 (HsFunTy ty21 ty22))
262 = mk_hs_op_ty mk1 pp_op1 fix1 ty1
263 HsFunTy (ppr funTyCon) funTyFixity ty21 ty22 loc2
265 mkHsOpTyRn mk1 pp_op1 fix1 ty1 ty2 -- Default case, no rearrangment
266 = return (mk1 ty1 ty2)
269 mk_hs_op_ty :: (LHsType Name -> LHsType Name -> HsType Name)
270 -> SDoc -> Fixity -> LHsType Name
271 -> (LHsType Name -> LHsType Name -> HsType Name)
272 -> SDoc -> Fixity -> LHsType Name -> LHsType Name -> SrcSpan
274 mk_hs_op_ty mk1 pp_op1 fix1 ty1
275 mk2 pp_op2 fix2 ty21 ty22 loc2
276 | nofix_error = do { addErr (precParseErr (quotes pp_op1,fix1)
277 (quotes pp_op2,fix2))
278 ; return (mk1 ty1 (L loc2 (mk2 ty21 ty22))) }
279 | associate_right = return (mk1 ty1 (L loc2 (mk2 ty21 ty22)))
280 | otherwise = do { -- Rearrange to ((ty1 `op1` ty21) `op2` ty22)
281 new_ty <- mkHsOpTyRn mk1 pp_op1 fix1 ty1 ty21
282 ; return (mk2 (noLoc new_ty) ty22) }
284 (nofix_error, associate_right) = compareFixity fix1 fix2
287 ---------------------------
288 mkOpAppRn :: LHsExpr Name -- Left operand; already rearranged
289 -> LHsExpr Name -> Fixity -- Operator and fixity
290 -> LHsExpr Name -- Right operand (not an OpApp, but might
294 -- (e11 `op1` e12) `op2` e2
295 mkOpAppRn e1@(L _ (OpApp e11 op1 fix1 e12)) op2 fix2 e2
297 = addErr (precParseErr (ppr_op op1,fix1) (ppr_op op2,fix2)) `thenM_`
298 returnM (OpApp e1 op2 fix2 e2)
301 = mkOpAppRn e12 op2 fix2 e2 `thenM` \ new_e ->
302 returnM (OpApp e11 op1 fix1 (L loc' new_e))
304 loc'= combineLocs e12 e2
305 (nofix_error, associate_right) = compareFixity fix1 fix2
307 ---------------------------
308 -- (- neg_arg) `op` e2
309 mkOpAppRn e1@(L _ (NegApp neg_arg neg_name)) op2 fix2 e2
311 = addErr (precParseErr (pp_prefix_minus,negateFixity) (ppr_op op2,fix2)) `thenM_`
312 returnM (OpApp e1 op2 fix2 e2)
315 = mkOpAppRn neg_arg op2 fix2 e2 `thenM` \ new_e ->
316 returnM (NegApp (L loc' new_e) neg_name)
318 loc' = combineLocs neg_arg e2
319 (nofix_error, associate_right) = compareFixity negateFixity fix2
321 ---------------------------
323 mkOpAppRn e1 op1 fix1 e2@(L _ (NegApp neg_arg _)) -- NegApp can occur on the right
324 | not associate_right -- We *want* right association
325 = addErr (precParseErr (ppr_op op1, fix1) (pp_prefix_minus, negateFixity)) `thenM_`
326 returnM (OpApp e1 op1 fix1 e2)
328 (_, associate_right) = compareFixity fix1 negateFixity
330 ---------------------------
332 mkOpAppRn e1 op fix e2 -- Default case, no rearrangment
333 = ASSERT2( right_op_ok fix (unLoc e2),
334 ppr e1 $$ text "---" $$ ppr op $$ text "---" $$ ppr fix $$ text "---" $$ ppr e2
336 returnM (OpApp e1 op fix e2)
338 -- Parser left-associates everything, but
339 -- derived instances may have correctly-associated things to
340 -- in the right operarand. So we just check that the right operand is OK
341 right_op_ok fix1 (OpApp _ _ fix2 _)
342 = not error_please && associate_right
344 (error_please, associate_right) = compareFixity fix1 fix2
345 right_op_ok fix1 other
348 -- Parser initially makes negation bind more tightly than any other operator
349 -- And "deriving" code should respect this (use HsPar if not)
350 mkNegAppRn :: LHsExpr id -> SyntaxExpr id -> RnM (HsExpr id)
351 mkNegAppRn neg_arg neg_name
352 = ASSERT( not_op_app (unLoc neg_arg) )
353 returnM (NegApp neg_arg neg_name)
355 not_op_app (OpApp _ _ _ _) = False
356 not_op_app other = True
358 ---------------------------
359 mkOpFormRn :: LHsCmdTop Name -- Left operand; already rearranged
360 -> LHsExpr Name -> Fixity -- Operator and fixity
361 -> LHsCmdTop Name -- Right operand (not an infix)
364 -- (e11 `op1` e12) `op2` e2
365 mkOpFormRn a1@(L loc (HsCmdTop (L _ (HsArrForm op1 (Just fix1) [a11,a12])) _ _ _))
368 = addErr (precParseErr (ppr_op op1,fix1) (ppr_op op2,fix2)) `thenM_`
369 returnM (HsArrForm op2 (Just fix2) [a1, a2])
372 = mkOpFormRn a12 op2 fix2 a2 `thenM` \ new_c ->
373 returnM (HsArrForm op1 (Just fix1)
374 [a11, L loc (HsCmdTop (L loc new_c) [] placeHolderType [])])
375 -- TODO: locs are wrong
377 (nofix_error, associate_right) = compareFixity fix1 fix2
380 mkOpFormRn arg1 op fix arg2 -- Default case, no rearrangment
381 = returnM (HsArrForm op (Just fix) [arg1, arg2])
384 --------------------------------------
385 mkConOpPatRn :: Located Name -> Fixity -> LPat Name -> LPat Name
388 mkConOpPatRn op2 fix2 p1@(L loc (ConPatIn op1 (InfixCon p11 p12))) p2
389 = lookupFixityRn (unLoc op1) `thenM` \ fix1 ->
391 (nofix_error, associate_right) = compareFixity fix1 fix2
394 addErr (precParseErr (ppr_op op1,fix1) (ppr_op op2,fix2)) `thenM_`
395 returnM (ConPatIn op2 (InfixCon p1 p2))
397 if associate_right then
398 mkConOpPatRn op2 fix2 p12 p2 `thenM` \ new_p ->
399 returnM (ConPatIn op1 (InfixCon p11 (L loc new_p))) -- XXX loc right?
401 returnM (ConPatIn op2 (InfixCon p1 p2))
403 mkConOpPatRn op fix p1 p2 -- Default case, no rearrangment
404 = ASSERT( not_op_pat (unLoc p2) )
405 returnM (ConPatIn op (InfixCon p1 p2))
407 not_op_pat (ConPatIn _ (InfixCon _ _)) = False
408 not_op_pat other = True
410 --------------------------------------
411 checkPrecMatch :: Bool -> Name -> MatchGroup Name -> RnM ()
412 -- True indicates an infix lhs
413 -- See comments with rnExpr (OpApp ...) about "deriving"
415 checkPrecMatch False fn match
417 checkPrecMatch True op (MatchGroup ms _)
420 check (L _ (Match (p1:p2:_) _ _))
421 = checkPrec op (unLoc p1) False `thenM_`
422 checkPrec op (unLoc p2) True
425 -- This can happen. Consider
428 -- The infix flag comes from the first binding of the group
429 -- but the second eqn has no args (an error, but not discovered
430 -- until the type checker). So we don't want to crash on the
433 checkPrec op (ConPatIn op1 (InfixCon _ _)) right
434 = lookupFixityRn op `thenM` \ op_fix@(Fixity op_prec op_dir) ->
435 lookupFixityRn (unLoc op1) `thenM` \ op1_fix@(Fixity op1_prec op1_dir) ->
437 inf_ok = op1_prec > op_prec ||
438 (op1_prec == op_prec &&
439 (op1_dir == InfixR && op_dir == InfixR && right ||
440 op1_dir == InfixL && op_dir == InfixL && not right))
442 info = (ppr_op op, op_fix)
443 info1 = (ppr_op op1, op1_fix)
444 (infol, infor) = if right then (info, info1) else (info1, info)
446 checkErr inf_ok (precParseErr infol infor)
448 checkPrec op pat right
451 -- Check precedence of (arg op) or (op arg) respectively
452 -- If arg is itself an operator application, then either
453 -- (a) its precedence must be higher than that of op
454 -- (b) its precedency & associativity must be the same as that of op
455 checkSectionPrec :: FixityDirection -> HsExpr RdrName
456 -> LHsExpr Name -> LHsExpr Name -> RnM ()
457 checkSectionPrec direction section op arg
459 OpApp _ op fix _ -> go_for_it (ppr_op op) fix
460 NegApp _ _ -> go_for_it pp_prefix_minus negateFixity
463 L _ (HsVar op_name) = op
464 go_for_it pp_arg_op arg_fix@(Fixity arg_prec assoc)
465 = lookupFixityRn op_name `thenM` \ op_fix@(Fixity op_prec _) ->
466 checkErr (op_prec < arg_prec
467 || op_prec == arg_prec && direction == assoc)
468 (sectionPrecErr (ppr_op op_name, op_fix)
469 (pp_arg_op, arg_fix) section)
472 Precedence-related error messages
476 = hang (ptext SLIT("precedence parsing error"))
477 4 (hsep [ptext SLIT("cannot mix"), ppr_opfix op1, ptext SLIT("and"),
479 ptext SLIT("in the same infix expression")])
481 sectionPrecErr op arg_op section
482 = vcat [ptext SLIT("The operator") <+> ppr_opfix op <+> ptext SLIT("of a section"),
483 nest 4 (ptext SLIT("must have lower precedence than the operand") <+> ppr_opfix arg_op),
484 nest 4 (ptext SLIT("in the section:") <+> quotes (ppr section))]
486 pp_prefix_minus = ptext SLIT("prefix `-'")
487 ppr_op op = quotes (ppr op) -- Here, op can be a Name or a (Var n), where n is a Name
488 ppr_opfix (pp_op, fixity) = pp_op <+> brackets (ppr fixity)
491 %*********************************************************
493 \subsection{Contexts and predicates}
495 %*********************************************************
498 rnContext :: SDoc -> LHsContext RdrName -> RnM (LHsContext Name)
499 rnContext doc = wrapLocM (rnContext' doc)
501 rnContext' :: SDoc -> HsContext RdrName -> RnM (HsContext Name)
502 rnContext' doc ctxt = mappM (rnLPred doc) ctxt
504 rnLPred :: SDoc -> LHsPred RdrName -> RnM (LHsPred Name)
505 rnLPred doc = wrapLocM (rnPred doc)
507 rnPred doc (HsClassP clas tys)
508 = do { clas_name <- lookupOccRn clas
509 ; tys' <- rnLHsTypes doc tys
510 ; returnM (HsClassP clas_name tys')
512 rnPred doc (HsEqualP ty1 ty2)
513 = do { ty1' <- rnLHsType doc ty1
514 ; ty2' <- rnLHsType doc ty2
515 ; returnM (HsEqualP ty1' ty2')
517 rnPred doc (HsIParam n ty)
518 = do { name <- newIPNameRn n
519 ; ty' <- rnLHsType doc ty
520 ; returnM (HsIParam name ty')
525 *********************************************************
527 \subsection{Patterns}
529 *********************************************************
532 rnPatsAndThen :: HsMatchContext Name
534 -> ([LPat Name] -> RnM (a, FreeVars))
536 -- Bring into scope all the binders and type variables
537 -- bound by the patterns; then rename the patterns; then
538 -- do the thing inside.
540 -- Note that we do a single bindLocalsRn for all the
541 -- matches together, so that we spot the repeated variable in
544 rnPatsAndThen ctxt pats thing_inside
545 = bindPatSigTyVarsFV pat_sig_tys $
546 bindLocatedLocalsFV doc_pat bndrs $ \ new_bndrs ->
547 rnLPats pats `thenM` \ (pats', pat_fvs) ->
548 thing_inside pats' `thenM` \ (res, res_fvs) ->
550 unused_binders = filter (not . (`elemNameSet` res_fvs)) new_bndrs
552 warnUnusedMatches unused_binders `thenM_`
553 returnM (res, res_fvs `plusFV` pat_fvs)
555 pat_sig_tys = collectSigTysFromPats pats
556 bndrs = collectLocatedPatsBinders pats
557 doc_pat = ptext SLIT("In") <+> pprMatchContext ctxt
559 rnLPats :: [LPat RdrName] -> RnM ([LPat Name], FreeVars)
560 rnLPats ps = mapFvRn rnLPat ps
562 rnLPat :: LPat RdrName -> RnM (LPat Name, FreeVars)
563 rnLPat = wrapLocFstM rnPat
565 -- -----------------------------------------------------------------------------
568 rnPat :: Pat RdrName -> RnM (Pat Name, FreeVars)
570 rnPat (WildPat _) = returnM (WildPat placeHolderType, emptyFVs)
573 = lookupBndrRn name `thenM` \ vname ->
574 returnM (VarPat vname, emptyFVs)
576 rnPat (SigPatIn pat ty)
577 = doptM Opt_GlasgowExts `thenM` \ glaExts ->
580 then rnLPat pat `thenM` \ (pat', fvs1) ->
581 rnHsTypeFVs doc ty `thenM` \ (ty', fvs2) ->
582 returnM (SigPatIn pat' ty', fvs1 `plusFV` fvs2)
584 else addErr (patSigErr ty) `thenM_`
585 rnPat (unLoc pat) -- XXX shouldn't throw away the loc
587 doc = text "In a pattern type-signature"
589 rnPat (LitPat lit@(HsString s))
590 = do { ovlStr <- doptM Opt_OverloadedStrings
591 ; if ovlStr then rnPat (mkNPat (mkHsIsString s) Nothing)
592 else do { rnLit lit; return (LitPat lit, emptyFVs) } } -- Same as below
595 returnM (LitPat lit, emptyFVs)
597 rnPat (NPat lit mb_neg eq _)
598 = rnOverLit lit `thenM` \ (lit', fvs1) ->
600 Nothing -> returnM (Nothing, emptyFVs)
601 Just _ -> lookupSyntaxName negateName `thenM` \ (neg, fvs) ->
602 returnM (Just neg, fvs)
603 ) `thenM` \ (mb_neg', fvs2) ->
604 lookupSyntaxName eqName `thenM` \ (eq', fvs3) ->
605 returnM (NPat lit' mb_neg' eq' placeHolderType,
606 fvs1 `plusFV` fvs2 `plusFV` fvs3)
607 -- Needed to find equality on pattern
609 rnPat (NPlusKPat name lit _ _)
610 = rnOverLit lit `thenM` \ (lit', fvs1) ->
611 lookupLocatedBndrRn name `thenM` \ name' ->
612 lookupSyntaxName minusName `thenM` \ (minus, fvs2) ->
613 lookupSyntaxName geName `thenM` \ (ge, fvs3) ->
614 returnM (NPlusKPat name' lit' ge minus,
615 fvs1 `plusFV` fvs2 `plusFV` fvs3)
616 -- The Report says that n+k patterns must be in Integral
619 = rnLPat pat `thenM` \ (pat', fvs) ->
620 returnM (LazyPat pat', fvs)
623 = rnLPat pat `thenM` \ (pat', fvs) ->
624 returnM (BangPat pat', fvs)
626 rnPat (AsPat name pat)
627 = rnLPat pat `thenM` \ (pat', fvs) ->
628 lookupLocatedBndrRn name `thenM` \ vname ->
629 returnM (AsPat vname pat', fvs)
631 rnPat (ConPatIn con stuff) = rnConPat con stuff
635 = rnLPat pat `thenM` \ (pat', fvs) ->
636 returnM (ParPat pat', fvs)
638 rnPat (ListPat pats _)
639 = rnLPats pats `thenM` \ (patslist, fvs) ->
640 returnM (ListPat patslist placeHolderType, fvs)
642 rnPat (PArrPat pats _)
643 = rnLPats pats `thenM` \ (patslist, fvs) ->
644 returnM (PArrPat patslist placeHolderType,
645 fvs `plusFV` implicit_fvs)
647 implicit_fvs = mkFVs [lengthPName, indexPName]
649 rnPat (TuplePat pats boxed _)
650 = checkTupSize (length pats) `thenM_`
651 rnLPats pats `thenM` \ (patslist, fvs) ->
652 returnM (TuplePat patslist boxed placeHolderType, fvs)
654 rnPat (TypePat name) =
655 rnHsTypeFVs (text "In a type pattern") name `thenM` \ (name', fvs) ->
656 returnM (TypePat name', fvs)
658 -- -----------------------------------------------------------------------------
661 rnConPat con (PrefixCon pats)
662 = lookupLocatedOccRn con `thenM` \ con' ->
663 rnLPats pats `thenM` \ (pats', fvs) ->
664 returnM (ConPatIn con' (PrefixCon pats'), fvs `addOneFV` unLoc con')
666 rnConPat con (RecCon rpats)
667 = lookupLocatedOccRn con `thenM` \ con' ->
668 rnRpats rpats `thenM` \ (rpats', fvs) ->
669 returnM (ConPatIn con' (RecCon rpats'), fvs `addOneFV` unLoc con')
671 rnConPat con (InfixCon pat1 pat2)
672 = lookupLocatedOccRn con `thenM` \ con' ->
673 rnLPat pat1 `thenM` \ (pat1', fvs1) ->
674 rnLPat pat2 `thenM` \ (pat2', fvs2) ->
675 lookupFixityRn (unLoc con') `thenM` \ fixity ->
676 mkConOpPatRn con' fixity pat1' pat2' `thenM` \ pat' ->
677 returnM (pat', fvs1 `plusFV` fvs2 `addOneFV` unLoc con')
679 -- -----------------------------------------------------------------------------
682 -- Haddock comments for record fields are renamed to Nothing here
683 rnRpats :: [HsRecField RdrName (LPat RdrName)]
684 -> RnM ([HsRecField Name (LPat Name)], FreeVars)
686 = mappM_ field_dup_err dup_fields `thenM_`
687 mapFvRn rn_rpat rpats `thenM` \ (rpats', fvs) ->
688 returnM (rpats', fvs)
690 (_, dup_fields) = removeDups compare [ unLoc f | HsRecField f _ _ <- rpats ]
692 field_dup_err dups = addErr (dupFieldErr "pattern" dups)
694 rn_rpat (HsRecField field pat _)
695 = lookupLocatedGlobalOccRn field `thenM` \ fieldname ->
696 rnLPat pat `thenM` \ (pat', fvs) ->
697 returnM ((mkRecField fieldname pat'), fvs `addOneFV` unLoc fieldname)
702 %************************************************************************
704 \subsubsection{Literals}
706 %************************************************************************
708 When literals occur we have to make sure
709 that the types and classes they involve
713 rnLit :: HsLit -> RnM ()
714 rnLit (HsChar c) = checkErr (inCharRange c) (bogusCharError c)
715 rnLit other = returnM ()
717 rnOverLit (HsIntegral i _)
718 = lookupSyntaxName fromIntegerName `thenM` \ (from_integer_name, fvs) ->
720 returnM (HsIntegral i from_integer_name, fvs)
722 extra_fvs = mkFVs [plusIntegerName, timesIntegerName]
723 -- Big integer literals are built, using + and *,
724 -- out of small integers (DsUtils.mkIntegerLit)
725 -- [NB: plusInteger, timesInteger aren't rebindable...
726 -- they are used to construct the argument to fromInteger,
727 -- which is the rebindable one.]
729 returnM (HsIntegral i from_integer_name, fvs `plusFV` extra_fvs)
731 rnOverLit (HsFractional i _)
732 = lookupSyntaxName fromRationalName `thenM` \ (from_rat_name, fvs) ->
734 extra_fvs = mkFVs [ratioDataConName, plusIntegerName, timesIntegerName]
735 -- We have to make sure that the Ratio type is imported with
736 -- its constructor, because literals of type Ratio t are
737 -- built with that constructor.
738 -- The Rational type is needed too, but that will come in
739 -- as part of the type for fromRational.
740 -- The plus/times integer operations may be needed to construct the numerator
741 -- and denominator (see DsUtils.mkIntegerLit)
743 returnM (HsFractional i from_rat_name, fvs `plusFV` extra_fvs)
745 rnOverLit (HsIsString s _)
746 = lookupSyntaxName fromStringName `thenM` \ (from_string_name, fvs) ->
747 returnM (HsIsString s from_string_name, fvs)
752 %*********************************************************
756 %*********************************************************
759 checkTupSize :: Int -> RnM ()
760 checkTupSize tup_size
761 | tup_size <= mAX_TUPLE_SIZE
764 = addErr (sep [ptext SLIT("A") <+> int tup_size <> ptext SLIT("-tuple is too large for GHC"),
765 nest 2 (parens (ptext SLIT("max size is") <+> int mAX_TUPLE_SIZE)),
766 nest 2 (ptext SLIT("Workaround: use nested tuples or define a data type"))])
768 forAllWarn doc ty (L loc tyvar)
769 = ifOptM Opt_WarnUnusedMatches $
770 addWarnAt loc (sep [ptext SLIT("The universally quantified type variable") <+> quotes (ppr tyvar),
771 nest 4 (ptext SLIT("does not appear in the type") <+> quotes (ppr ty))]
776 = hang (ptext SLIT("Illegal operator") <+> quotes (ppr op) <+> ptext SLIT("in type") <+> quotes (ppr ty))
777 2 (parens (ptext SLIT("Use -fscoped-type-variables to allow operators in types")))
780 = ptext SLIT("character literal out of range: '\\") <> char c <> char '\''
783 = (ptext SLIT("Illegal signature in pattern:") <+> ppr ty)
784 $$ nest 4 (ptext SLIT("Use -fglasgow-exts to permit it"))
787 = hsep [ptext SLIT("duplicate field name"),
789 ptext SLIT("in record"), text str]