head
- это обычный ответ, который вы видите три (один со своим именем) - это функционально то же, что вы уже знаете (x !! 0
~ head x
). Я настоятельно рекомендую против частичных функций, если вы не можете доказать (с локальными знаниями), что вы никогда не пропустите пустой список и не получите исключение во время выполнения.
Если ваша функция не гарантирует непустой список, используйте listToMaybe :: [a] -> Maybe a
:
> listToMaybe [4]
Just 4
> listToMaybe [5,39,-2,6,1]
Just 5
> listToMaybe []
Nothing -- A 'Nothing' constructor instead of an exception
Если у вас есть Maybe a
, с которым вы можете сопоставить шаблон, сохраните его как Maybe и используйте fmap
, либо монаду Maybe, либо другой метод для выполнения дальнейших операций .