There is a safe package on hackage that has variations on head, headMay which uses maybe, headNote which allows you to put a more descriptive error should it fail, and headDef which allows you to specify a default, should it fail.
But the most common way of dealing with it is not to use head except in extremely simple cases. You can grep some substantial codebases like yesod and see maybe two or three actual heads in the code. People tend to use pattern matching on lists or case statements on the list.