I’m following a tutorial. (Real World Haskell)
And I have one beginner question about head and tail called on empty lists: In GHCi it returns exception.
Intuitively I think I would say they both should return an empty list. Could you correct me ? Why not ? (as far as I remember in OzML left or right of an empty list returns nil)
I surely have not yet covered this topic in the tutorial, but isnt it a source of bugs (if providing no arguments)?
I mean if ever passing to a function a list of arguments which may be optionnal, reading them with head may lead to a bug ?
I just know the GHCi behaviour, I don’t know what happens when compiled.
Well –
headis[a] -> a. It returns the single, first element; no list.And when there is no first element like in an empty list? Well what to return? You can’t create a value of type
afrom nothing, so all that remains isundefined– an error.And
tail? Tail basically is a list without its first element – i.e. one item shorter than the original one. You can’t uphold these laws when there is no first element.When you take one apple out of a box, you can’t have the same box (what happened when
tail [] == []). The behaviour has to beundefinedtoo.This leads to the following conclusion:
Yes, it is a source of bugs, but because it allows to write flawed code. Code that’s basically trying to read a value that doesn’t exist. So: *Don’t ever use head/tail** – Use pattern matching.
The compiler can guarantee that all possible cases are covered, values are always defined and it’s much cleaner to read.