
#11390: GHC does not warn about redundant patterns -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.1 Resolution: | Keywords: warnings, | PatternMatchWarnings Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by gkaracha): Actually nothing is redundant in the above examples. As we discuss in the paper (section about laziness), `(sillyId undefined)` will give you the right hand-side so the clause: {{{#!hs sillyId x = x }}} is not redundant at all. Of course, this is not the case for: {{{#!hs sillyId2 :: F1 Char -> F1 Char sillyId2 (!x) = x }}} because it is strict in the argument, so no WHNF can have the type `F1 Char`. But even in this case, the clause is not actually redundant, it just has an inaccessible RHS (remember this is not Agda). Pattern matching is not just used for discrimination in Haskell but also for evaluation, which I see as a side effect. Hence, the clause may have an inaccessible RHS, but by removing it the expression is not evaluated and you change the semantics of `sillyId2`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11390#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler