Перекрывающиеся совпадения

У меня есть следующий код:

test :: String -> Bool
test "g" = True
test "global" = True
test _ = False

Когда я загружаю его в GHCi (7.0.3), я получаю:

Warning: Pattern match(es) are overlapped
         In an equation for `test': test "g" = ...

Это ошибка или я что-то здесь упускаю?

Следующее удержание:

test "" == False
test "g" == True
test "gl" == False
test "global" == True
test "globalx" == False

ОБНОВИТЬ:

я использую {-# LANGUAGE OverloadedStrings #-},

2 ответа

Решение

Это ошибка GHC № 5117, возникающая в результате использования OverloadedStrings расширение. Это должно быть исправлено в GHC 7.2.

В качестве обходного пути вы можете отключить OverloadedStrings для модуля с {-# LANGUAGE NoOverloadedStrings #-}или отключите предупреждение нажатием {-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}, Или просто проигнорируй это:)

Вы включили OverloadedStrings? Если я правильно помню, это вызывает "ложные" перекрывающиеся шаблоны предупреждений, потому что в этом случае неясно, что, например, "g" и "global" являются взаимоисключающими.

Другие вопросы по тегам