Error message: "accepting non-standard pattern guards" when there are no actual patterns
This code:
{-# LANGUAGE NoPatternGuards #-}
main :: IO ()
main = print (foo 5)
foo :: Int -> Int
foo x | x < 5, x > 1 = x
| otherwise = -1
Produces this message:
test.hs:7:7: warning:
accepting non-standard pattern guards (use PatternGuards to suppress this message)
x < 5, x > 1
This is not really a "pattern guard". It's just a guard with multiple clauses, which is a syntax extension that's enabled by -XPatternGuards
, but there are no patterns.
(Incidentally, I wish I could disable pattern guards to avoid the f x |x<-4
problem where a student tries to compare to negative 4 and gets an accidental pattern guard, yet still keep the multiple-clause syntax; but that's a whole different can of worms.)
Trac metadata
Trac field | Value |
---|---|
Version | 8.6.1 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |