From e24638cf715a67d087cac3d6a8d979f76f957c62 Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Fri, 26 Nov 2010 16:24:09 +0000 Subject: [PATCH] Acutally, wild-card variables *can* have occurrences This patch removes the Lint test, and comments why --- compiler/coreSyn/CoreLint.lhs | 4 ---- compiler/simplCore/SimplEnv.lhs | 11 +++++++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/coreSyn/CoreLint.lhs b/compiler/coreSyn/CoreLint.lhs index 428cda8..5cc82a2 100644 --- a/compiler/coreSyn/CoreLint.lhs +++ b/compiler/coreSyn/CoreLint.lhs @@ -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') } diff --git a/compiler/simplCore/SimplEnv.lhs b/compiler/simplCore/SimplEnv.lhs index 896fe97..d9eea39 100644 --- a/compiler/simplCore/SimplEnv.lhs +++ b/compiler/simplCore/SimplEnv.lhs @@ -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 -- 1.7.10.4