
Another silly question is that I still can't see why we need to concern about the view pattern for exhaustiveness checking of overloaded list. I
#14547: Wrong warning by -Wincomplete-patterns -------------------------------------+------------------------------------- Reporter: YoshikuniJujo | Owner: (none) Type: bug | Status: patch Priority: low | Milestone: Component: Compiler | Version: 8.2.1 Resolution: | Keywords: incomplete- | patterns OverloadedLists, | PatternMatchWarnings TypeFamilies Operating System: Linux | Architecture: x86 Type of failure: Incorrect | Test Case: error/warning at compile-time | deSugar/should_compile/T14547 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D4624 Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Alas, with `RebindableSyntax` we don't know ''anything'' about `toList`. (Without `RebindableSyntax` I think your reasoning is correct.) But now I am worried about {{{ f (x:xs) = .. f [p,q] = ... }}} The `(x:xs)` pattern will translate as an ordinary cons pattern. The `[p,q]` pattern will be subject to overloaded lists. So if `RebindableSyntax` is on and `toList` does something strange, simply dropping the `toList` altogether, and desugaring to {{{ f (x:xs) = .. f (p:q:[]) = ... }}} may not be right. So in the presence of `RebindableSyntax` I think we should treat `ListPat` like any other view pattern; i.e. coverage/exhaustiveness does not help much. In the absence of `RebindableSyntax`, but with `-XOverloadedStrings`, can we be sure that `toList` is the identity function if the pattern type is a list type? I think so. In which case your simplified version is fine. Bottom line: check for `NoRebindableSyntax`! think the toList and the [a] instance of IsList are different with ordinary view functions in view pattern. I could not parse the question. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14547#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler