Commit e24638cf authored by simonpj@microsoft.com's avatar simonpj@microsoft.com

Acutally, wild-card variables *can* have occurrences

This patch removes the Lint test, and comments why
parent 491b818a
......@@ -227,10 +227,6 @@ lintCoreExpr (Var var)
= do { checkL (not (var == oneTupleDataConId))
(ptext (sLit "Illegal one-tuple"))
; checkL (not (var `hasKey` wildCardKey))
(ptext (sLit "Occurence of a wild-card binder") <+> ppr var)
-- See Note [WildCard binders] in SimplEnv
; checkDeadIdOcc var
; var' <- lookupIdInScope var
; return (idType var') }
......
......@@ -240,11 +240,18 @@ Note [WildCard binders]
The program to be simplified may have wild binders
case e of wild { p -> ... }
We want to *rename* them away, so that there are no
occurrences of 'wild' (with wildCardKey). The easy
occurrences of 'wild-id' (with wildCardKey). The easy
way to do that is to start of with a representative
Id in the in-scope set
There should be no *occurrences* of wild.
There can be be *occurrences* of wild-id. For example,
MkCore.mkCoreApp transforms
e (a /# b) --> case (a /# b) of wild { DEFAULT -> e wild }
This is ok provided 'wild' isn't free in 'e', and that's the delicate
thing. Generally, you want to run the simplifier to get rid of the
wild-ids before doing much else.
It's a very dark corner of GHC. Maybe it should be cleaned up.
\begin{code}
getMode :: SimplEnv -> SimplifierMode
......
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