packages feed

MonadCatchIO-mtl 0.2.0.0 → 0.3.1.0

raw patch · 3 files changed

Files

Control/Monad/CatchIO.hs view
@@ -2,107 +2,11 @@                                E.Exception(..),                                throw,                                try, tryJust,-                               onException, bracket,+                               onException, bracket, bracket_,+                               finally, bracketOnError,                                Handler(..), catches )  where -import Prelude hiding ( catch )-+import "MonadCatchIO-transformers" Control.Monad.CatchIO import qualified Control.Exception.Extensible as E--import Control.Monad.Reader-import Control.Monad.State-import Control.Monad.Error-import Control.Monad.Writer-import Control.Monad.RWS--class MonadIO m => MonadCatchIO m where-    -- | Generalized version of 'E.catch'-    catch   :: E.Exception e => m a -> (e -> m a) -> m a- -    -- | Generalized version of 'E.block'-    block   :: m a -> m a--    -- | Generalized version of 'E.unblock'-    unblock :: m a -> m a---- | Generalized version of 'E.throwIO'-throw :: (MonadCatchIO m, E.Exception e) => e -> m a---- | Generalized version of 'E.try'-try :: (MonadCatchIO m, E.Exception e) => m a -> m (Either e a)---- | Generalized version of 'E.tryJust'-tryJust :: (MonadCatchIO m, E.Exception e)-        => (e -> Maybe b) -> m a -> m (Either b a)---- | Generalized version of 'E.Handler'-data Handler m a = forall e . E.Exception e => Handler (e -> m a)---- | Generalized version of 'E.catches'-catches :: MonadCatchIO m => m a -> [Handler m a] -> m a-catches a handlers = a `catch` handler-    where handler e = foldr tryH (throw e) handlers-            where tryH (Handler h) res = case E.fromException e of-                                             Just e' -> h e'-                                             Nothing -> res---instance MonadCatchIO IO where-    catch   = E.catch-    block   = E.block-    unblock = E.unblock--instance MonadCatchIO m => MonadCatchIO (ReaderT r m) where-    m `catch` f = ReaderT $ \r -> (runReaderT m r)-                                    `catch` (\e -> runReaderT (f e) r)-    block       = mapReaderT block-    unblock     = mapReaderT unblock--instance MonadCatchIO m => MonadCatchIO (StateT s m) where-    m `catch` f = StateT $ \s -> (runStateT m s)-                                   `catch` (\e -> runStateT (f e) s)-    block       = mapStateT block-    unblock     = mapStateT unblock--instance (MonadCatchIO m, Error e) => MonadCatchIO (ErrorT e m) where-    m `catch` f = mapErrorT (\m' -> m' `catch` (\e -> runErrorT $ f e)) m-    block       = mapErrorT block-    unblock     = mapErrorT unblock--instance (Monoid w, MonadCatchIO m) => MonadCatchIO (WriterT w m) where-    m `catch` f = WriterT $ runWriterT m-                              `catch` \e -> runWriterT (f e)-    block       = mapWriterT block-    unblock     = mapWriterT unblock--instance (Monoid w, MonadCatchIO m) => MonadCatchIO (RWST r w s m) where-    m `catch` f = RWST $ \r s -> runRWST m r s-                           `catch` \e -> runRWST (f e) r s-    block       = mapRWST block-    unblock     = mapRWST unblock--throw = liftIO . E.throwIO--try a = catch (a >>= \ v -> return (Right v)) (\e -> return (Left e))--tryJust p a = do-  r <- try a-  case r of-        Right v -> return (Right v)-        Left  e -> case p e of-                        Nothing -> throw e `asTypeOf` (return $ Left undefined)-                        Just b  -> return (Left b)---- | Generalized version of 'E.bracket'-bracket :: MonadCatchIO m => m a -> (a -> m b) -> (a -> m c) -> m c-bracket before after thing =-    block (do a <- before-              r <- unblock (thing a) `onException` after a-              after a-              return r)---- | Generalized version of 'E.onException'-onException :: MonadCatchIO m => m a -> m b -> m a-onException a onEx = a `catch` (\(e::E.SomeException) -> onEx >> throw e)
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright 2004-2008, Oleg Kiselyov, Alistair Bayley (from Takusen)+          2008-2011, Daniel Gorin  +All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are+met:++ * Redistributions of source code must retain the above copyright notice,+   this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above copyright+   notice, this list of conditions and the following disclaimer in the+   documentation and/or other materials provided with the distribution.++ * Neither the name of the copyright holder(s) nor the names of+   contributors may be used to endorse or promote products derived from+   this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MonadCatchIO-mtl.cabal view
@@ -1,5 +1,5 @@ name:                MonadCatchIO-mtl-version:             0.2.0.0+version:             0.3.1.0 description:         Provides a monad-transformer version of the @Control.Exception.catch@         function. For this, it defines the @MonadCatchIO@ class, a subset of@@ -8,18 +8,17 @@  synopsis:           Monad-transformer version of the Control.Exception module category:           Control-license:            PublicDomain+license:            BSD3+license-file:       LICENSE maintainer:         jcpetruzza@gmail.com-homepage:           http://code.haskell.org/~jcpetruzza/MonadCatchIO-mtl+homepage:           http://darcsden.com/jcpetruzza/MonadCatchIO-mtl -cabal-version:      >= 1.2+cabal-version:      >= 1.4 build-type:         Simple-tested-with:        GHC==6.10+tested-with:        GHC==6.12.3, GHC==7.0.3, GHC==7.2.1, GHC==7.4.2, GHC==7.6.0  Library-  build-depends:    base, mtl, extensible-exceptions-  ghc-options:      -Wall-  extensions:       ExistentialQuantification,-                    ScopedTypeVariables+  build-depends:    base < 5, extensible-exceptions, MonadCatchIO-transformers==0.3.1.0+  extensions:       PackageImports    exposed-modules: Control.Monad.CatchIO