[Haskell-cafe] Redundant/overlapping patterns?
Jeff Clites
jclites at mac.com
Fri Jul 21 10:15:11 UTC 2023
I think it’s saying it’s redundant because you already known what constructor it is; I’m guessing you’d get the same error from “case A of A -> …”.
Jeff
> On Jul 21, 2023, at 2:57 AM, Ben Franksen <ben.franksen at online.de> wrote:
>
> So the error message should talk about "unreachable pattern" instead of "redundant pattern". That would cover all situations and would be less confusing in this special one.
>
> Cheers
> Ben
>
>> Am 20.07.23 um 06:53 schrieb Viktor Dukhovni:
>>> On Wed, Jul 19, 2023 at 09:24:20PM -0700, Todd Wilson wrote:
>>> Can someone please explain this:
>>>
>>> ghci> case 1 of 2 -> 3
>>>
>>> <interactive>:1:11: warning: [-Woverlapping-patterns]
>>> Pattern match is redundant
>>> In a case alternative: 2 -> ...
>>> *** Exception: <interactive>:1:1-16: Non-exhaustive patterns in case
>>>
>>> The non-exhaustive patterns part is obvious, but what is redundant about
>>> this match? And how can there be overlapping patterns when there's only one?
>> The error message changed betweek 8.8 and 8.10:
>> GHCi, version 8.8.4: https://www.haskell.org/ghc/ :? for help
>> λ> data X = A | B
>> λ> case A of B -> 42
>> *** Exception: <interactive>:2:1-18: Non-exhaustive patterns in case
>> vs.
>> GHCi, version 8.10.5: https://www.haskell.org/ghc/ :? for help
>> λ> data X = A | B
>> λ> case A of B -> 42
>> <interactive>:2:11: warning: [-Woverlapping-patterns]
>> Pattern match is redundant
>> In a case alternative: B -> ...
>> *** Exception: <interactive>:2:1-17: Non-exhaustive patterns in case
>> The exception part is the same, and I hope non-controversial, the
>> pattern match is indeed non-exhaustive. What's new is the compile-time
>> warning. It is documented at, e.g.:
>> https://ghc.gitlab.haskell.org/ghc/doc/users_guide/using-warnings.html#ghc-flag--Woverlapping-patterns
>> where it is explained that a pattern is considered "overlapping" when it
>> is unreachable, which is true in this case, though for reasons other
>> than redundancy wrt. a prior pattern. And indeed we see the true
>> issue/criterion is "reachability":
>> λ> case A of B | GHC.Exts.considerAccessible -> 42
>> *** Exception: <interactive>:3:1-47: Non-exhaustive patterns in case
>> The same is of course seen if the warning is disabled:
>> λ> :set -Wno-overlapping-patterns
>> λ> case A of B -> 42
>> *** Exception: <interactive>:6:1-17: Non-exhaustive patterns in case
>> The pattern match is redundant given the specific scrutinee. Perhaps
>> non-reachability in this case could be reported via a different warning,
>> but we have what we have.
>
> --
> I would rather have questions that cannot be answered, than answers that
> cannot be questioned. -- Richard Feynman
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
More information about the Haskell-Cafe
mailing list