content: 
  import Control.Exception as E
  
  import Data.Int
  
  main :: IO ()
  main = do putStrLn "Int8"
            mapM_ p =<< (f :: IO [Either Int8 String])
            putStrLn "Int16"
            mapM_ p =<< (f :: IO [Either Int16 String])
            putStrLn "Int32"
            mapM_ p =<< (f :: IO [Either Int32 String])
            putStrLn "Int64"
            mapM_ p =<< (f :: IO [Either Int64 String])
            putStrLn "Int"
            mapM_ p =<< (f :: IO [Either Int String])
      where p (Left x) = print x
            p (Right e) = putStrLn e
  
  f :: (Integral a, Bounded a) => IO [Either a String]
  f = sequence [ g (minBound `div` (-1)),
                 g (minBound `mod` (-1)),
                 g (case minBound `divMod` (-1) of (x, _) -> x),
                 g (case minBound `divMod` (-1) of (_, x) -> x),
                 g (minBound `quot` (-1)),
                 g (minBound `rem` (-1)),
                 g (case minBound `quotRem` (-1) of (x, _) -> x),
                 g (case minBound `quotRem` (-1) of (_, x) -> x) ]
      where g x = do x' <- evaluate x
                     return (Left x')
                  `E.catch`
                     \e -> return (Right (show (e :: SomeException)))
  
  