On Wed, 2 Mar 2011, Rouan van Dalen wrote:
I would like to know what is the preferred Haskell mechanism for
handling exceptions in the IO monad? I am not concerned with mechanisms
such as Maybe / Either, but would like to know about exception
mechanisms inside the IO monad.
The 2 I know of are:
o) throwDyn
o) ioError and catch
I do need the exceptions to be extendable. So which is the preferred way
to handle exceptions in Haskell for new libs?
For my taste there is nothing I can really recommend. I cannot recommend
the exceptions that are implicit in IO, since if you have an IO action you
cannot know on what exceptions you have to react. Can the action throw a
FileDoesNotExist or AudioBufferCouldNotBeAllocated? You don't know,
because the type does not tell you. I think the mechanisms like IO (Either
ErrorMsg a) are the better solution, since they explicitly tell you, what
exceptions you have to expect and when you forgot to handle a particular
exception. I think the control-monad-exception package is the most
advanced one, but it requires some type extensions. I have written
explicit-exceptions which is Haskell 98, and you can use more advanced
types of exceptions (such as those from control-monad-exception) on top of
it.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe