[GHC] #9951: OverloadedLists breaks exhaustiveness check
GHC
ghc-devs at haskell.org
Sat Jan 3 21:13:57 UTC 2015
#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
More information about the ghc-tickets
mailing list