diff options
author | Joey Hess <joey@kitenet.net> | 2011-10-04 00:34:04 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-10-04 00:34:04 -0400 |
commit | ff21fd4a652cc6516d0e06ab885adf1c93eddced (patch) | |
tree | a84f041317fdbdb07377459e725e165e0845b8c0 /Annex | |
parent | 1a96d4ab35ed5c2af95a1598620cbbd13bc295b3 (diff) |
factor out Annex exception handling module
Diffstat (limited to 'Annex')
-rw-r--r-- | Annex/Exception.hs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Annex/Exception.hs b/Annex/Exception.hs new file mode 100644 index 000000000..549ef4fd5 --- /dev/null +++ b/Annex/Exception.hs @@ -0,0 +1,27 @@ +{- exception handling in the git-annex monad + - + - Copyright 2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.Exception ( + bracketIO, + handle, + throw, +) where + +import Control.Exception.Control (handle) +import Control.Monad.IO.Control (liftIOOp) +import Control.Exception hiding (handle, throw) + +import AnnexCommon + +{- Runs an Annex action, with setup and cleanup both in the IO monad. -} +bracketIO :: IO c -> (c -> IO b) -> Annex a -> Annex a +bracketIO setup cleanup go = + liftIOOp (Control.Exception.bracket setup cleanup) (const go) + +{- Throws an exception in the Annex monad. -} +throw :: Control.Exception.Exception e => e -> Annex a +throw = liftIO . throwIO |