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