ccQ*_*ein 0 haskell pattern-matching
我正在编写一个函数,该函数根据Map.Map参数中的 Map 是否为空而具有不同的操作
这是我的代码:
import qualified Data.Map.Lazy as Map
testF :: (Ord a, Num a) => Map.Map a a -> [a] -> [a]
testF empty _ = [1024]
testF _ [] = []
testF m (x:xs) = [x] ++ (testF m xs)
main = do
let a = Map.fromList [(1,2), (3,4)]
print $ testF Map.empty [1,2,3] -- show [1024]
print $ testF a [1,2,3] -- show [1024] too
print $ a == Map.empty -- False
Run Code Online (Sandbox Code Playgroud)
当然,GHC 已经通知我最新的功能行是多余的。
Pattern match is redundant
In an equation for ‘testF’: testF m (x : xs) =
Run Code Online (Sandbox Code Playgroud)
谢谢你。
你不匹配Map.empty,你匹配empty,它只是一个绑定到任何映射的局部变量。你不能匹配,Map.empty因为它不是一个构造函数。
你可以做的是:
testF m _ | Map.null m = [1024]
Run Code Online (Sandbox Code Playgroud)
即使用警卫检查是否m为空。