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.


It's a static error, detectable statically, and yet it's deferred to the runtime. I'd much rather the compiler catch my errors than needing to create an extensive debugging suite and running it after compilation.

It is not detectable statically. It is only detectable statically for a class for programs.

Admittedly, for that class of programs, ndm's fine tool "Catch" is a very clever thing.

> Is this not the promise of purity?

No. Purity and partiality are orthogonal. Nobody promised pure languages would be total.

Functions like uncons and viewL are nicer (because they're safe), but they can have overhead because they're unnecessarily complete (e.g. the Maybe wrapper can be avoided if we know a-priori that Just will be the constructor used).

uncons and viewL are totally irrelevant.

They're just a convenient syntax around case matching.

Jules
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to