
#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 sighingnow): My previous comment addresses on `toList`, leading to some confusion. The ticket **IS** about the type functions. Look the `ListPat` case in `translatePat` (after the patch Phab:D4624): {{{#!hs -- overloaded list ListPat x lpats elem_ty (Just (pat_ty, _to_list)) | Just e_ty <- splitListTyConApp_maybe pat_ty , (_, norm_e_ty) <- normaliseType fam_insts Nominal e_ty -- e_ty can be a type family instance, like -- `It (List a)`, but we prefer `a`, see Trac #14547 , (_, norm_elem_ty) <- normaliseType fam_insts Nominal elem_ty -- elem_ty is frequently something like -- `Item [Int]`, but we prefer `Int` , norm_elem_ty `eqType` norm_e_ty -> -- We have to ensure that the element types are exactly the same. -- Otherwise, one may give an instance IsList [Int] (more specific than -- the default IsList [a]) with a different implementation for `toList' translatePat fam_insts (ListPat x lpats e_ty Nothing) -- See Note [Guards and Approximation] | otherwise -> mkCanFailPmPat pat_ty }}} For pattern `[]` in `foo [] = Empty`, we have ||pat_ty || `[It (List a_a2mv)]` || ||e_ty || `It (List a_a2mv)` || ||norm_e_ty || `a_a2mv` || ||elem_ty || `GHC.Exts.Item [a_a2mv]` || ||norm_elem_ty || `a_a2mv` || Before Phab:4624, we compared `norm_elem_ty` with `e_ty`, rather than `norm_e_ty`, then we failed to know the `[]` is list's nil pattern. We need also normalize the `e_ty` and this ticket is only about the type function. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14547#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler