Lazy patterns are like wild-cards for overlap warnings
authorsimonpj@microsoft.com <unknown>
Thu, 27 Jul 2006 15:50:09 +0000 (15:50 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 27 Jul 2006 15:50:09 +0000 (15:50 +0000)
MERGE TO STABLE

Fixes Trac #827
Test is should_compiler/ds058

compiler/deSugar/Check.lhs

index 9aac5ce..097a008 100644 (file)
@@ -623,7 +623,8 @@ simplify_pat pat@(WildPat gt) = pat
 simplify_pat (VarPat id)      = WildPat (idType id) 
 simplify_pat (VarPatOut id _) = WildPat (idType id)    -- Ignore the bindings
 simplify_pat (ParPat p)       = unLoc (simplify_lpat p)
-simplify_pat (LazyPat p)      = unLoc (simplify_lpat p)
+simplify_pat (LazyPat p)      = WildPat (hsPatType p)  -- For overlap and exhaustiveness checking
+                                                       -- purposes, a ~pat is like a wildcard
 simplify_pat (BangPat p)      = unLoc (simplify_lpat p)
 simplify_pat (AsPat id p)     = unLoc (simplify_lpat p)
 simplify_pat (SigPatOut p _)  = unLoc (simplify_lpat p)        -- I'm not sure this is right