diff options
author | Joey Hess <joey@kitenet.net> | 2012-02-03 16:47:24 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-02-03 16:47:24 -0400 |
commit | 146c36ca545a297f1e44e3cf2c91f3c0e17c909f (patch) | |
tree | 56d6fb274427bb793155182aed7e92e2e00895ba /Utility/Exception.hs | |
parent | 05f89123e08075cfbd136f37c60423c1ad38d1fe (diff) |
IO exception rework
ghc 7.4 comaplains about use of System.IO.Error to catch exceptions.
Ok, use Control.Exception, with variants specialized to only catch IO
exceptions.
Diffstat (limited to 'Utility/Exception.hs')
-rw-r--r-- | Utility/Exception.hs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Utility/Exception.hs b/Utility/Exception.hs new file mode 100644 index 000000000..7b6c9c999 --- /dev/null +++ b/Utility/Exception.hs @@ -0,0 +1,39 @@ +{- Simple IO exception handling + - + - Copyright 2011-2012 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Utility.Exception where + +import Prelude hiding (catch) +import Control.Exception +import Control.Applicative + +{- Catches IO errors and returns a Bool -} +catchBoolIO :: IO Bool -> IO Bool +catchBoolIO a = catchDefaultIO a False + +{- Catches IO errors and returns a Maybe -} +catchMaybeIO :: IO a -> IO (Maybe a) +catchMaybeIO a = catchDefaultIO (Just <$> a) Nothing + +{- Catches IO errors and returns a default value. -} +catchDefaultIO :: IO a -> a -> IO a +catchDefaultIO a def = catchIO a (const $ return def) + +{- Catches IO errors and returns the error message. -} +catchMsgIO :: IO a -> IO (Either String a) +catchMsgIO a = dispatch <$> tryIO a + where + dispatch (Left e) = Left $ show e + dispatch (Right v) = Right v + +{- catch specialized for IO errors only -} +catchIO :: IO a -> (IOException -> IO a) -> IO a +catchIO = catch + +{- try specialized for IO errors only -} +tryIO :: IO a -> IO (Either IOException a) +tryIO = try |