diff --git a/pugs-DrIFT.cabal b/pugs-DrIFT.cabal
--- a/pugs-DrIFT.cabal
+++ b/pugs-DrIFT.cabal
@@ -1,5 +1,5 @@
 name:                pugs-DrIFT
-version:             2.2.3.20120717
+version:             2.2.3.20130611
 synopsis:            DrIFT with pugs-specific rules.
 description:         DrIFT is a type sensitive preprocessor for Haskell. It extracts type declarations
                      and directives from modules. The directives cause rules to be fired on the parsed
diff --git a/src/ChaseImports.hs b/src/ChaseImports.hs
--- a/src/ChaseImports.hs
+++ b/src/ChaseImports.hs
@@ -29,6 +29,7 @@
 import qualified Unlit
 import Control.Monad
 import GenUtil
+import Control.Exception hiding (try)
 
 try x = catch (x >>= return . Right) (return . Left)
 
@@ -90,6 +91,7 @@
 -- search though paths, using try
 findModule :: [String] -> String -> IO String
 findModule paths modname = let
+	action :: FilePath -> IO (Either SomeException (String,FilePath,Bool))
 	action p = try $ do
 			    h <- readFile p
  	                    return (h,p,".lhs" `isSuffixOf` p)
diff --git a/src/GenUtil.hs b/src/GenUtil.hs
--- a/src/GenUtil.hs
+++ b/src/GenUtil.hs
@@ -101,6 +101,7 @@
 import qualified System.Exit as System
 import System.Random(StdGen, newStdGen, Random(randomR))
 import System.Time
+import Control.Exception
 
 {-# SPECIALIZE snub :: [String] -> [String] #-}
 {-# SPECIALIZE snub :: [Int] -> [Int] #-}
@@ -286,10 +287,10 @@
 lefts xs = [x | Left x <- xs]
 
 ioM :: Monad m => IO a -> IO (m a)
-ioM action = catch (fmap return action) (\e -> return (fail (show e)))
+ioM action = catch (fmap return action) (\e -> return (fail (show (e :: SomeException))))
 
 ioMp :: MonadPlus m => IO a -> IO (m a)
-ioMp action = catch (fmap return action) (\_ -> return mzero)
+ioMp action = catch (fmap return action) (\e -> let _ = e :: SomeException in return mzero)
 
 -- | reformat a string to not be wider than a given width, breaking it up
 -- between words.
