重叠模式匹配

时间:2012-01-24 20:28:50

标签: haskell ghc overlapping-matches

我有以下代码:

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 个答案:

答案 0 :(得分:9)

这是GHC bug #5117,因使用OverloadedStrings扩展而产生。它应该在GHC 7.2中修复。

作为解决方法,您可以为OverloadedStrings的模块关闭{-# LANGUAGE NoOverloadedStrings #-},或使用{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}关闭警告。或者只是忽略它:)

答案 1 :(得分:3)

你打开了OverloadedStrings吗?如果我没记错的话,会导致“假的”重叠模式警告,因为在这种情况下,不清楚例如“g”和“global”是相互排斥的。