[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