如何在Haskell中使用元组进行模式匹配?

时间:2012-10-01 10:40:03

标签: haskell pattern-matching tuples

尝试与元组匹配时遇到问题。

filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])

这意味着当第二个参数是一个空列表时,我不关心我希望返回的元组的第一个元素。 我该如何实现呢?

2 个答案:

答案 0 :(得分:7)

如果您不关心元组的第一个元素,并且您确定不会使用它,则可以返回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, [])

答案 1 :(得分:5)

如果您不关心作为元组的第一个组件返回什么,我建议您返回一个错误,如果您不小心使用它将会爆炸。

filterSth _ [] = (error "Don't use this", [])