
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, donn@avvanta.com