Keith Wansbrough wrote:
Read the paper _A Semantics for Imprecise Exceptions_. The problem is that the evaluation order of Haskell would have to be fixed for this not to lose referential transparency. What is the value of
catchExcept (show (makeExcept "E1" + makeExcept "E2")) (\x -> x)
? Haskell wouldn't be "purely functional" any more.
As Graham Klyne indicated in a previous mail, in practice there are two ways of dealing with errors in purely functional code: - capture possible errors in the result type. This will probably force the use of a monad, with the subsequent sequencing of operation and coding style. - throw an exception, and hence be unable to recover from errors outside the IO monad. Both of these approaches seem fairly "invasive" in their effect on the code. Are people using haskell for real world tasks happy with having to choose from these? The former is more general, but any function that needs to be able to fail or propagate failure will end up being a do {} block. Tim