Перекрывающиеся совпадения - PullRequest
5 голосов
/ 25 января 2012

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

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

UPDATE:

Я использую {-# LANGUAGE OverloadedStrings #-}.

Ответы [ 2 ]

9 голосов
/ 25 января 2012

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

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

3 голосов
/ 25 января 2012

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

...