Henning Thielemann wrote:
> You know, in Haskell we do not need a built-in exception handling facility
> because we can handle it with the elements of the language. Returning an
> exceptional value or throwing an exception is the same. We can only hide
> the exception propagation by appropriate binding of actions.
I don't consider exceptions in the IO monad to be a "built-in" concept.
This is because, if we wanted to, we could implement IO exceptions purely
in Haskell on top of a primitive IO monad without exceptions (indeed,
that's what Hugs and other systems do, and what GHC did in the past). If
you are implementing a Haskell system, you don't need to provide any
primitive functionality to support exceptions, it can all be done in the
implementation of the IO monad. Exceptions are no more built-in than the
Either type.
In practice, you might want to implement exceptions at a lower level for
performance reasons, which is what GHC does.
Cheers,
Simon