Доступ ко всем локальным переменным

Я получаю любопытное предупреждение при сопоставлении с образцом, но только когда включен OverloadedStrings ...

$ 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.

Я не понимаю, почему я получаю предупреждение для f с OverloadedStrings, особенно потому, что я не получаю предупреждения для f без OverloadedStrings, а также не получаю предупреждения для g или h , которые отличаются от f только первым шаблоном (который во всех случаях соответствует только одному конкретному значению).

Если предположить, что это не ошибка в GHC, что мне не хватает?

6
задан dave4420 30 September 2010 в 17:49
поделиться