me estoy haciendo una curiosa advertencia cuando la coincidencia de patrones, pero sólo cuando está activado OverloadedStrings ...¿Por qué recibo esta advertencia 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.
No entiendo por qué me da la advertencia para f
con OverloadedStrings, sobre todo porque no lo hago Obtiene la advertencia para f
sin OverloadedStrings, y tampoco recibe la advertencia para g
o h
, que difieren de f
solo en el primer patrón (que en todos los casos coincide solo con un valor particular).
Suponiendo que esto no es un error en GHC, ¿qué me estoy perdiendo?
¿Es posible que '" "' esté sobrecargado de modo que '[" "]' sea equivalente a '[_]'? – Gabe
No, está haciendo coincidir como si fuera '[" "]', no como si fuera '[_]'. – dave4420
¿Has probado esto en GHC 7.0? –