Haskell函数中的非穷举模式

dev*_*vel 2 haskell list

我有一个haskell程序的问题.我想做这样的事情:

main = do
    print $ map foo [(1, [(2, 3), (4,5)])]

foo :: (Int, [(Int, Int)]) -> (Int, [(Int, Int)])
foo (a, [(b, c)]) = (a+1, [(b, c)])
Run Code Online (Sandbox Code Playgroud)

然后我得到运行时错误:

Non-exhaustive patterns in function Main.foo
Run Code Online (Sandbox Code Playgroud)

怎么可能做出这样的行动?我只想访问列表中没有的参数.

ham*_*mar 9

(a, [(b, c)])不匹配(1, [(2, 3), (4, 5)]),因为后者中的列表有两个元素,而您的模式只需要一个元素.

如果要保持列表不变,请改用此模式:

foo (a, bar) = (a+1, bar)
Run Code Online (Sandbox Code Playgroud)

现在bar将匹配,[(2, 3), (4, 5)]因为它只是一个匹配任何正确类型的绑定.