module Catch(main) where import Prelude import Control.Exception f :: [Int] -> Int f (_:_) = 99 class C a where m :: a -> Int instance C () main :: IO () main = do let sshow :: String -> String sshow = show exn :: SomeException -> IO String exn e = return (displayException e) x <- catch (return ("o" ++ "k")) (\ (_ :: SomeException) -> return "what?") putStrLn $ sshow x y <- catch (do { error "bang!"; return "yyy" }) exn putStrLn $ sshow y z <- catch (do { print (f []); return "zzz" }) exn putStrLn $ sshow z w <- catch (do { print (m ()); return "www" }) exn putStrLn $ sshow w