Мне нужно научиться Haskell для университета, и поэтому я использую learnyouahaskell.com для начала.
Я всегда использовал императивные языки, поэтому решил заняться Haskell, кодируя намного больше, чем для других языков. < ш > Я начал реализовывать несколько функций для работы со списками, такими как head
, tail
, init
,...
В какой-то момент я просмотрел реализации этих функций для сравнения с моими, и я наткнулся на нулевую функцию, определенную в List.lhs
.
null:
-- | Test whether a list is empty.
null :: [a] -> Bool
null [] = True
null (_:_) = False
моя реализация:
mNull :: [a] -> Bool
mNull [] = True
mNull _ = False
Я знаю, что нет глупых вопросов даже для таких простых вопросов:)
Поэтому мой вопрос заключается в том, почему в исходной реализации вместо _
используется (_:_)
?
Есть ли какое-либо преимущество в использовании (_:_)
или есть ли какие-либо краевые случаи, о которых я не знаю?
Я не могу себе представить никаких преимуществ, потому что _
ловит все.