Sto diventando un curioso avviso quando pattern matching, ma solo quando è abilitato OverloadedStrings ...Perché ricevo questo avviso da 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.
Non capisco il motivo per cui ho l'avvertimento per f
con OverloadedStrings, soprattutto perché non lo faccio ottenere l'avviso per f
senza OverloadedStrings e inoltre non ricevere l'avviso per g
o h
, che differiscono da f
solo nel primo modello (che in tutti i casi corrisponde solo a un singolo valore particolare).
Partendo dal presupposto che questo non è un bug in GHC, cosa mi manca?
E 'possibile che "" "' sia sovraccarico tale che '[" "]' è equivalente a '[_]'? – Gabe
No, corrisponde come se fosse '[" "]', non come se fosse '[_]'. – dave4420
Hai provato questo su GHC 7.0? –