В дополнение к хорошим ответам, данным до сих пор, null
на самом деле имеет тип
null :: Foldable t => t a -> Bool
Я не знаю, добирались ли вы до классов типов в LYAH, но суть в том, что null
можно использовать не только для списков, но и для любой структуры данных, реализующей null
.
Это означает, что использование null
в Map
< /a> или Set
допустим, слишком.
> null Map.empty
True
> null (Map.singleton 1)
False
> null Set.empty
True
> null (Set.singleton 1)
False
> null []
True
> null [1]
False
Я не думаю, что особенно часто пишут функции, которые должны быть такими общими, но не помешает написать более общий код по умолчанию.
Дополнительное примечание
Во многих случаях вы в конечном итоге захотите использовать такую функцию, как null
, для выполнения условного поведения в списке (или другой структуре данных). Если вы уже знаете, что ваши входные данные представляют собой определенную структуру данных, более элегантно просто сопоставить шаблон с пустым регистром.
Сравнивать
myMap :: (a -> b) -> [a] -> [b]
myMap f xs
| null xs = []
myMap f (x:xs) = f x : myMap f xs
to
myMap' :: (a -> b) -> [a] -> [b]
myMap' f [] = []
myMap' f (x:xs) = f x : myMap' f xs
В общем, вы должны попытаться отдать предпочтение сопоставлению с образцом, если это имеет смысл.
person
cole
schedule
14.07.2019