
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