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