On Mar 8, 2008, at 10:54 PM, Don Stewart wrote:

[... replying to my poorly informed rant about exceptions ... ]


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.

OK, I tried this out and found that it does work, and I thought to myself, `no more posting rants to haskell-cafe after late nights out with too much wine!' But then I changed my test error from a pattern match, to a `head',
and that gets past my exception handler:

        module Main (main) where
        import System (getArgs)

        ax = getArgs >>= print . head

        px = catch ax (\ e -> putStrLn ("caught this one: " ++ show e))

        main = px

Is there a way to catch it, that I'm missing?  What is the essential
difference between these errors?

If we only have to bring IO out to the locations where we want to handle
errors, then that's not so bad as I thought.

Incidentally, I also reviewed again the two Wiki pages previously
recommended in this thread, for Error and Exception, and I really
don't follow them.  I know the author is well versed in Haskell and
I'm sure he's trying to convey some valuable notion about the
difference between errors and exceptions, but it doesn't come
across and I don't think it's just me.

        Donn Cave, [EMAIL PROTECTED]
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to