[Haskell-cafe] Haskell and the Software design process
wren ng thornton
wren at freegeek.org
Sun May 9 03:32:41 EDT 2010
Rafael Cunha de Almeida wrote:
> I don't think that safeSecondElement is worse than secondElement. I think it's
> better for the program to crash right away when you try to do something that
> doesn't make sense.
>
> Getting the secondElement of a list with one or less elements doesn't make
> sense, so you are definetely doing something wrong if you expected the list to
> have two elements, but it doesn't. It's best that the program crashes there,
> than propagate the error and crash somewhere else or, worse, not crash at all
> and give a wrong answer.
There are two different issues at stake here, one is reactive and the
other is proactive. You're responding to the reactive question: how do I
deal with unexpected errors when they arise? But those who argue against
partial functions are usually responding to the proactive question: how
do I prevent unexpected errors from arising in the first place?
By allowing partial functions we allow for the introduction of
unexpected errors, which then forces us to handle the reactive question
of what to do when those errors show up. But if partial functions are
avoided, then there are no unexpected errors (of that sort) which could
ever show up.
We already have to deal with bottom, that's a fact of life for
general-purpose programming. But partial functions allow us to introduce
bottom in new ways. When we have bottom meaning just non-termination,
then we have a good idea about how we should treat it. But once we start
introducing other bottoms for things like non-exhaustive pattern
matching or recoverable exceptions, then it's no longer clear what
exactly bottom means. This in turn makes it hard to know whether the
semantics of the program match the semantics we want. In particular, I'm
a fan of semantics which say my program will not crash. Sure, crashing
is better than silently corrupting everything; but not crashing is
better than crashing.
--
Live well,
~wren
More information about the Haskell-Cafe
mailing list