[Haskell-cafe] Exception handling when using STUArray

Don Stewart dons at galois.com
Sun Mar 9 01:54:24 EST 2008


donn:
> 
> On Mar 8, 2008, at 12:33 PM, Henning Thielemann wrote:
> 
> >On Sat, 8 Mar 2008, Denis Bueno wrote:
> ...
> >>I am also using STUArray from some time-critical code; however, I
> >>don't deal with ArrayException, or any exceptions for that matter.
> >>What besides an out-of-bounds read or write might throw an
> >>ArrayException?  If it is out-of-bounds reading or writing, surely
> >>that indicates a bug in your program that you'd rather fix than catch
> >>the exception, no?
> >
> >Another instance of mixing up exceptions and errors in the Haskell  
> >libraries.
> >  http://www.haskell.org/haskellwiki/Error
> >  http://www.haskell.org/haskellwiki/Exception
> 
> This seems to me one of the disappointments of Haskell - not just a
> detail that was handled in an awkward way, but a fundamental flaw.
> I'm not talking about ArrayException, whatever that is, but the notion
> that errors encountered in functional code mustn't be handled as
> exceptions.
> 
> If your input file is not where you expected it and openFile fails,  
> or it was
> incompletely written out and your input processing fails in a 'head' or
> pattern match, the difference is not very important to me.  I want to be
> able to call your code and manage the risk that it's going to kill my  
> server.
> You may feel that it's your job to write more robust functional code  
> that
> can't run into these errors, but C programmers can be found who insist
> that it's the programmer's job to manage heap memory and it isn't all
> that hard.  A programming language that fails to make it easier to write
> more robust code, is not moving us forward.  I rejoice that Haskell  
> isn't
> as miserable as C, but with respect to exceptions and errors, it's  
> behind
> for example Python.  Languages that can, use exceptions like IndexError.
> Evidently, Haskell fundamentally can't.  That's too bad.

I don't understand this complaint -- you can handle all these with Control.Exception.

xmonad catches all these things for example, in user code, to prevent
poorly written modules throwing a pattern match exception, or calling
'error' and making the window manager unstable.

Handling exceptions generated from pure code is just another part of
making systems more robust -- and of course you can do it in Haskell.

-- Don


More information about the Haskell-Cafe mailing list