我有以下代码:
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 #-}
。
答案 0 :(得分:9)
这是GHC bug #5117,因使用OverloadedStrings
扩展而产生。它应该在GHC 7.2中修复。
作为解决方法,您可以为OverloadedStrings
的模块关闭{-# LANGUAGE NoOverloadedStrings #-}
,或使用{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}
关闭警告。或者只是忽略它:)
答案 1 :(得分:3)
你打开了OverloadedStrings
吗?如果我没记错的话,会导致“假的”重叠模式警告,因为在这种情况下,不清楚例如“g”和“global”是相互排斥的。