summaryrefslogtreecommitdiff
path: root/compiler/rename
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2011-05-04 23:09:53 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2011-05-04 23:09:53 +0100
commitd4780d48bb8a665a2cdaa5e2c6e4bfbc87298fd0 (patch)
treea80eb0fa2c17f64c4b57d2dbf92fbb7a16827845 /compiler/rename
parent831ea49474bf28f1d33428d09bc8912827be265e (diff)
downloadhaskell-d4780d48bb8a665a2cdaa5e2c6e4bfbc87298fd0.tar.gz
Do-notation in an arrow context is not rebindable
Fixes Trac #4851
Diffstat (limited to 'compiler/rename')
-rw-r--r--compiler/rename/RnExpr.lhs21
1 files changed, 18 insertions, 3 deletions
diff --git a/compiler/rename/RnExpr.lhs b/compiler/rename/RnExpr.lhs
index b3458dbc80..46eef670f2 100644
--- a/compiler/rename/RnExpr.lhs
+++ b/compiler/rename/RnExpr.lhs
@@ -841,9 +841,24 @@ rnParallelStmts ctxt segs thing_inside
lookupStmtName :: HsStmtContext Name -> Name -> RnM (HsExpr Name, FreeVars)
-- Like lookupSyntaxName, but ListComp/PArrComp are never rebindable
-lookupStmtName ListComp n = return (HsVar n, emptyFVs)
-lookupStmtName PArrComp n = return (HsVar n, emptyFVs)
-lookupStmtName _ n = lookupSyntaxName n
+-- Neither is ArrowExpr, which has its own desugarer in DsArrows
+lookupStmtName ctxt n
+ = case ctxt of
+ ListComp -> not_rebindable
+ PArrComp -> not_rebindable
+ ArrowExpr -> not_rebindable
+ PatGuard {} -> not_rebindable
+
+ DoExpr -> rebindable
+ MDoExpr -> rebindable
+ MonadComp -> rebindable
+ GhciStmt -> rebindable -- I suppose?
+
+ ParStmtCtxt c -> lookupStmtName c n -- Look inside to
+ TransStmtCtxt c -> lookupStmtName c n -- the parent context
+ where
+ rebindable = lookupSyntaxName n
+ not_rebindable = return (HsVar n, emptyFVs)
\end{code}
Note [Renaming parallel Stmts]