Перекрывающиеся совпадения
У меня есть следующий код:
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" являются взаимоисключающими.