Squash a space leak
[ghc-hetmet.git] / compiler / rename / RnSource.lhs
index 6210a17..cebc674 100644 (file)
@@ -174,7 +174,9 @@ rnSrcDecls shadowP group@(HsGroup {hs_valds  = val_decls,
    -- (H) Rename Everything else
 
    (rn_inst_decls,    src_fvs2) <- rnList rnSrcInstDecl   inst_decls ;
-   (rn_rule_decls,    src_fvs3) <- rnList rnHsRuleDecl    rule_decls ;
+   (rn_rule_decls,    src_fvs3) <- setOptM Opt_ScopedTypeVariables $
+                                  rnList rnHsRuleDecl    rule_decls ;
+                          -- Inside RULES, scoped type variables are on
    (rn_foreign_decls, src_fvs4) <- rnList rnHsForeignDecl foreign_decls ;
    (rn_default_decls, src_fvs5) <- rnList rnDefaultDecl   default_decls ;
    (rn_deriv_decls,   src_fvs6) <- rnList rnSrcDerivDecl  deriv_decls ;
@@ -500,17 +502,18 @@ rnSrcDerivDecl (DerivDecl ty)
 rnHsRuleDecl :: RuleDecl RdrName -> RnM (RuleDecl Name, FreeVars)
 rnHsRuleDecl (HsRule rule_name act vars lhs _fv_lhs rhs _fv_rhs)
   = bindPatSigTyVarsFV (collectRuleBndrSigTys vars)    $
-
     bindLocatedLocalsFV doc (map get_var vars)         $ \ ids ->
-    mapFvRn rn_var (vars `zip` ids)            `thenM` \ (vars', fv_vars) ->
+    do { (vars', fv_vars) <- mapFvRn rn_var (vars `zip` ids)
+               -- NB: The binders in a rule are always Ids
+               --     We don't (yet) support type variables
 
-    rnLExpr lhs                                        `thenM` \ (lhs', fv_lhs') ->
-    rnLExpr rhs                                        `thenM` \ (rhs', fv_rhs') ->
+       ; (lhs', fv_lhs') <- rnLExpr lhs
+       ; (rhs', fv_rhs') <- rnLExpr rhs
 
-    checkValidRule rule_name ids lhs' fv_lhs'  `thenM_`
+       ; checkValidRule rule_name ids lhs' fv_lhs'
 
-    returnM (HsRule rule_name act vars' lhs' fv_lhs' rhs' fv_rhs',
-            fv_vars `plusFV` fv_lhs' `plusFV` fv_rhs')
+       ; return (HsRule rule_name act vars' lhs' fv_lhs' rhs' fv_rhs',
+                 fv_vars `plusFV` fv_lhs' `plusFV` fv_rhs') }
   where
     doc = text "In the transformation rule" <+> ftext rule_name
   
@@ -896,7 +899,7 @@ rnFamily (tydecl@TyFamily {tcdFlavour = flavour,
                           tcdLName = tycon, tcdTyVars = tyvars}) 
         bindIdxVars =
       do { checkM (isDataFlavour flavour                      -- for synonyms,
-                  || not (null tyvars)) $ addErr needOneIdx  -- #indexes >= 1
+                  || 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',