Je reçois un avertissement curieux lorsque la correspondance de motif, mais seulement quand OverloadedStrings est activé ...Pourquoi est-ce que je reçois cet avertissement de GHCi?
$ ghci -Wall
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let f x = case (x :: [String]) of {[""] -> "root"; ["product", _] -> "product"; _ -> "unknown"}
Prelude> :q
Leaving GHCi.
$ ghci -Wall -XOverloadedStrings
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let f x = case (x :: [String]) of {[""] -> "root"; ["product", _] -> "product"; _ -> "unknown"}
<interactive>:1:10:
Warning: Pattern match(es) are overlapped
In a case alternative: [""] -> ...
Prelude> let g x = case (x :: [String]) of {[] -> "root"; ["product", _] -> "product"; _ -> "unknown"}
Prelude> let h x = case (x :: [String]) of {["oops"] -> "root"; ["product", _] -> "product"; _ -> "unknown"}
Prelude> :q
Leaving GHCi.
Je ne comprends pas pourquoi je reçois l'avertissement pour f
avec OverloadedStrings, d'autant plus que je ne obtenir l'avertissement pour f
sans OverloadedStrings, et aussi ne pas obtenir l'avertissement pour g
ou h
, qui diffèrent de f
seulement dans le premier modèle (qui dans tous les cas ne correspond qu'à une seule valeur particulière).
En supposant que ce n'est pas un bug dans GHC, qu'est-ce qui me manque?
Est-il possible que '" "' soit surchargé de sorte que '[" "]' soit équivalent à '[_]'? – Gabe
Non, c'est comme s'il s'agissait de '[" "]', pas comme si c'était [_] '. – dave4420
Avez-vous testé cela sur GHC 7.0? –