是否建议在 Haskell 中始终进行详尽的模式匹配,即使对于“不可能”的情况也是如此?
例如,在下面的代码中,我在 foldr 的“累加器”上进行模式匹配。我完全控制了累加器的内容,因为我创建了它(它不是作为输入传递给我的,而是在我的函数中构建的)。因此,我知道某些模式永远不应该匹配它。如果我力求永远不要出现“模式匹配不完全”错误,那么我会为其放置一个模式匹配,该错误只是带有“此模式不应该发生”的消息。很像 C# 中的断言。我想不出还有什么可做的。
在这种情况下,你会推荐什么做法,为什么?
这是代码:
gb_groupBy p input = foldr step [] input
where
step item acc = case acc of
[] -> [[item]]
((x:xs):ys) -> if p x item
then (item:x:xs):ys
else [item]:acc
不匹配的模式(由解释器报告)是:
警告:模式匹配并非详尽无遗在另一种情况下:模式不匹配:[]:_