
#9951: OverloadedLists breaks exhaustiveness check -------------------------------------+------------------------------------- Reporter: Feuerbach | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.4 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: None/Unknown | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by MartinF): I note patterns using OverloadedLists desugar to view patterns - from that wiki page:
{{{#!haskell f [] = ... g [x,y,z] = ... }}}
will be treated as
{{{#!haskell f (toList -> []) = ... g (toList -> [x,y,z]) = ... }}}
So I'd guess this has the same underlying cause as the known problem with exhaustiveness checking of view patterns - see #5762. For instance, this: {{{ $ ghci -Wall -XOverloadedLists GHCi, ... Prelude> let f [] = (); f (_:_) = () <interactive>:2:5: Warning: Pattern match(es) are non-exhaustive In an equation for `f': Patterns not matched: [] }}} and its one-step-desugared equivalent: {{{ $ ghci -Wall -XViewPatterns GHCi, ... Prelude> :module +GHC.Exts Prelude GHC.Exts> let f (fromList -> []) = (); f (fromList -> _:_) = () <interactive>:3:5: Warning: Pattern match(es) are non-exhaustive In an equation for `f': Patterns not matched: _ }}} ... both produce spurious exhaustiveness warnings. Slightly different ones, though. How curious. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9951#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler