I notice that Prelude.catch and Exception.catch behave differently, even 
though they both have the same type signature (and name). Exception.catch 
catches exceptions that Prelude.catch does not.

For instance, it is possible to bind pure functional exceptions into the 
IO monad using Exception.evaluate:

    peUndef :: String;
    peUndef = undefined;

    ioUndef :: IO String;
    ioUndef = Exception.evaluate peUndef;

These can be caught with Exception.catch:

    main :: IO ();
           main = do
                {
                      result <- Exception.catch (ioUndef)
                                (\e -> return ("got exception: " ++ (show e)));
                hPutStr stderr (result ++ "\n");
                };

got exception: Prelude.undefined

...but not with Prelude.catch:

    main :: IO ();
           main = do
                {
                      result <- Prelude.catch (ioUndef)
                                (\e -> return ("got exception: " ++ (show e)));
                hPutStr stderr (result ++ "\n");
                };


Fail: Prelude.undefined

What's up with that?

-- 
Ashley Yakeley, Seattle WA

_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to