Acutally, wild-card variables *can* have occurrences
authorsimonpj@microsoft.com <unknown>
Fri, 26 Nov 2010 16:24:09 +0000 (16:24 +0000)
committersimonpj@microsoft.com <unknown>
Fri, 26 Nov 2010 16:24:09 +0000 (16:24 +0000)
This patch removes the Lint test, and comments why

compiler/coreSyn/CoreLint.lhs
compiler/simplCore/SimplEnv.lhs

index 428cda8..5cc82a2 100644 (file)
@@ -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') }
index 896fe97..d9eea39 100644 (file)
@@ -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