尝试使用元组键入匹配时遇到问题。
filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
这意味着当第二个参数是一个空列表时,我不在乎我希望返回的元组的第一个元素。我该如何实现呢?
尝试使用元组键入匹配时遇到问题。
filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
这意味着当第二个参数是一个空列表时,我不在乎我希望返回的元组的第一个元素。我该如何实现呢?
如果您不关心元组的第一个元素并且您确定不会使用它,您可以返回undefined
,即
filterSth _ [] = (undefined, [])
请记住,尝试评估undefined
将导致运行时异常。
另一个想法可能是返回Either ([a], [b]) [b]
。
filterSth :: [a] -> [b] -> Either ([a], [b]) [b]
filterSth _ [] = Right []
-- and a case for a non-empty second argument
如果你想原封不动地返回第一个参数,你不能使用_
. _
意味着您不在乎参数的值是什么,并且您不会使用它。由于您要使用它,因此您必须_
用命名参数替换并显式返回它
filterSth a [] = (a, [])
如果您不关心作为元组的第一个组件返回的内容,我建议您返回一个错误,如果您不小心使用它会爆炸。
filterSth _ [] = (error "Don't use this", [])