当我浏览时GHC.List.hs
,我遇到了以下定义null
:
-- | Test whether a list is empty.
null :: [a] -> Bool
null [] = True
null (_:_) = False
我很惊讶第二个等式不简单
null _ = False
这个替代等式在语法上是有效的并且不会改变null
: 因为第一个模式是空列表,所以只有当参数是非空列表时才会使用第二个模式。此外,在我看来,这个替代方程更简单,更易读。这引出了一个问题:
(_:_)
在这里使用模式而不是通配符是否有特殊原因?
(如果这是一种优化形式,请详细说明。)