Ben meraklı bir uyarı desen eşleştirme alıyorum ama OverloadedStrings etkinleştirildiğinde ben OverloadedStrings ile f
için uyarı almak neden sadece ...Bu uyarı neden GHCi'den geliyor? Bilmiyorum özellikle beri
$ 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.
anlamıyorum OverloadedStrings olmadan f
için uyarı almak ve aynı zamanda f
f
sadece ilk desende (tüm durumlarda yalnızca tek bir belirli bir değerle eşleşir) farklı olan uyarı almak için uyarı almayın (g
).
Bu durumun GHC'de bir hata olmadığı varsayımıyla neyi özlüyorum?
'' '' '' '' '' '' '' '' '' '' '' '' ile eşdeğerde aşırı yüklenebilir mi? – Gabe
Hayır, sanki "[" "], sanki" [_] "gibi değil. – dave4420
Bunu GHC 7.0 üzerinde test ettiniz mi? –