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