[Haskell-cafe] pattern matching instead of prelude.head

wren ng thornton wren at freegeek.org
Fri Sep 16 04:36:57 CEST 2011

On 9/15/11 10:24 PM, Michael Litchard wrote:
> Someone commented on StackOverflow that pattern matching the first
> element of a list was preferable to head. This makes sense
> intuitively. Could someone articulate the reason why this is true?

(1) If you call (head xs) you are assuming that xs is non-empty. If xs 
is empty, then it will throw an exception. Which is a major issue 
because tracing down these exceptions is a headache for everyone 
involved. Whereas, if you do (case xs of [] -> ...; x:xs' -> ...) you 
explicitly handle the case of xs being empty. This also applies to 
things like tail and fromJust.

(2) Also, even if you know xs is non-empty because you called (null xs) 
or the like, you can do the case match once and use the results 
everywhere. Whereas, using head and tail means doing a case match every 
time they're called. This is an efficiency issue, and also applies to 
functions which won't throw exceptions: like fst and snd, instead of 
pattern matching the tuple.

Live well,

More information about the Haskell-Cafe mailing list