
On Fri, Mar 27, 2009 at 9:51 PM, Jason Dusek
2009/03/27 John Lato
: From: Jules Bean
wren ng thornton wrote:
The type of head should not be [a] -> a + Error, it should be (a:[a]) -> a. With the latter type the compiler can ensure the precondition will be proved before calling head, thus eliminating erroneous calls.
Yes, but you know and I know that's not haskell.
I'm talking about haskell.
In haskell - a language which does not fully support dependent types - head is both necessary and useful.
I could follow the rest of this, but I don't understand why 'head' is necessary. Couldn't you always replace it with a case statement, with undefined on [] if necessary?
How would that be any different from head?
That's what I'm asking. It was claimed that 'head' is a necessary function, but I don't see why.