packages feed

MonadCatchIO-transformers 0.2.1.0 → 0.2.2.0

raw patch · 2 files changed

+72/−35 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Control.Monad.CatchIO: instance (MonadCatchIO m) => MonadCatchIO (ContT r m)
+ Control.Monad.CatchIO: instance (MonadCatchIO m) => MonadCatchIO (IdentityT m)
+ Control.Monad.CatchIO: instance (MonadCatchIO m) => MonadCatchIO (ListT m)
+ Control.Monad.CatchIO: instance (MonadCatchIO m) => MonadCatchIO (MaybeT m)

Files

MonadCatchIO-transformers.cabal view
@@ -1,5 +1,5 @@ Name:            MonadCatchIO-transformers-Version:         0.2.1.0+Version:         0.2.2.0 Cabal-Version:   >= 1.6 License:         PublicDomain Description:@@ -13,6 +13,10 @@ Synopsis:        Monad-transformer compatible version of the Control.Exception module Build-Type:      Simple +Source-repository head+  Type:     darcs+  Location: http://patch-tag.com/r/AriePeterson/MonadCatchIO-transformers+ Library   Build-Depends:     base == 4.*,@@ -21,8 +25,4 @@   Exposed-Modules:     Control.Monad.CatchIO   Hs-Source-Dirs:  src-  Ghc-options: -Wall-  Extensions:-    ExistentialQuantification,-    ScopedTypeVariables-+  Ghc-options:     -Wall
src/Control/Monad/CatchIO.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ExistentialQuantification, ScopedTypeVariables #-} module Control.Monad.CatchIO   (     MonadCatchIO(..)@@ -16,20 +17,27 @@ where  import           Prelude hiding ( catch )+import           Control.Applicative                          ((<$>))+import qualified Control.Exception.Extensible      as E -import           Control.Applicative        ((<$>))-import qualified Control.Exception.Extensible as E+import           Control.Monad.IO.Class                       (MonadIO,liftIO) -import           Control.Monad.IO.Class           (MonadIO,liftIO)  -import           Control.Monad.Trans.Error        (ErrorT          ,runErrorT ,mapErrorT ,Error)-import           Control.Monad.Trans.Reader       (ReaderT(ReaderT),runReaderT,mapReaderT)-import           Control.Monad.Trans.State        (StateT(StateT)  ,runStateT ,mapStateT )-import qualified Control.Monad.Trans.State.Strict as StrictState-import           Control.Monad.Trans.Writer       (WriterT(WriterT),runWriterT,mapWriterT)-import           Control.Monad.Trans.RWS          (RWST(RWST)      ,runRWST   ,mapRWST   )-import           Data.Monoid                      (Monoid)+import           Control.Monad.Trans.Cont                     (ContT(ContT)    ,runContT    ,mapContT    )+import           Control.Monad.Trans.Error                    (ErrorT          ,runErrorT   ,mapErrorT   ,Error)+import           Control.Monad.Trans.Identity                 (IdentityT       ,runIdentityT,mapIdentityT)+import           Control.Monad.Trans.List                     (ListT(ListT)    ,runListT    ,mapListT    )+import           Control.Monad.Trans.Maybe                    (MaybeT          ,runMaybeT   ,mapMaybeT   )+import           Control.Monad.Trans.RWS                      (RWST(RWST)      ,runRWST     ,mapRWST     )+import qualified Control.Monad.Trans.RWS.Strict    as Strict  (RWST(RWST)      ,runRWST     ,mapRWST     )+import           Control.Monad.Trans.Reader                   (ReaderT(ReaderT),runReaderT  ,mapReaderT  )+import           Control.Monad.Trans.State                    (StateT(StateT)  ,runStateT   ,mapStateT   )+import qualified Control.Monad.Trans.State.Strict  as Strict  (StateT(StateT)  ,runStateT   ,mapStateT   )+import           Control.Monad.Trans.Writer                   (WriterT         ,runWriterT  ,mapWriterT  )+import qualified Control.Monad.Trans.Writer.Strict as Strict  (WriterT         ,runWriterT  ,mapWriterT  ) +import           Data.Monoid                                  (Monoid) + class MonadIO m => MonadCatchIO m where   -- | Generalized version of 'E.catch'   catch   :: E.Exception e => m a -> (e -> m a) -> m a@@ -46,6 +54,41 @@   block   = E.block   unblock = E.unblock +instance MonadCatchIO m => MonadCatchIO (ContT r m) where+  m `catch` f = ContT $ \c -> runContT m c `catch` \e -> runContT (f e) c+  block       = mapContT block+  unblock     = mapContT 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 (MonadCatchIO m) => MonadCatchIO (IdentityT m) where+  m `catch` f = mapIdentityT (\m' -> m' `catch` \e -> runIdentityT $ f e) m+  block       = mapIdentityT block+  unblock     = mapIdentityT unblock++instance MonadCatchIO m => MonadCatchIO (ListT m) where+  m `catch` f = ListT $ runListT m `catch` \e -> runListT (f e)+  block       = mapListT block+  unblock     = mapListT unblock++instance (MonadCatchIO m) => MonadCatchIO (MaybeT m) where+  m `catch` f = mapMaybeT (\m' -> m' `catch` \e -> runMaybeT $ f e) m+  block       = mapMaybeT block+  unblock     = mapMaybeT 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++instance (Monoid w, MonadCatchIO m) => MonadCatchIO (Strict.RWST r w s m) where+  m `catch` f = Strict.RWST $ \r s -> Strict.runRWST m r s `catch` \e -> Strict.runRWST (f e) r s+  block       = Strict.mapRWST block+  unblock     = Strict.mapRWST 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@@ -56,26 +99,20 @@   block       = mapStateT block   unblock     = mapStateT unblock -instance MonadCatchIO m => MonadCatchIO (StrictState.StateT s m) where-  m `catch` f = StrictState.StateT $ \s -> StrictState.runStateT m s `catch` \e -> StrictState.runStateT (f e) s-  block       = StrictState.mapStateT block-  unblock     = StrictState.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 MonadCatchIO m => MonadCatchIO (Strict.StateT s m) where+  m `catch` f = Strict.StateT $ \s -> Strict.runStateT m s `catch` \e -> Strict.runStateT (f e) s+  block       = Strict.mapStateT block+  unblock     = Strict.mapStateT unblock  instance (Monoid w, MonadCatchIO m) => MonadCatchIO (WriterT w m) where-  m `catch` f = WriterT $ runWriterT m `catch` \e -> runWriterT $ f e+  m `catch` f = mapWriterT (\m' -> m' `catch` \e -> runWriterT $ f e) m   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-+instance (Monoid w, MonadCatchIO m) => MonadCatchIO (Strict.WriterT w m) where+  m `catch` f = Strict.mapWriterT (\m' -> m' `catch` \e -> Strict.runWriterT $ f e) m+  block       = Strict.mapWriterT block+  unblock     = Strict.mapWriterT unblock  -- | Generalized version of 'E.throwIO' throw :: (MonadIO m, E.Exception e) => e -> m a@@ -110,7 +147,7 @@ bracket before after thing = block $ do   a <- before   r <- unblock (thing a) `onException` after a-  after a+  _ <- after a   return r  -- | Generalized version of 'E.onException'@@ -125,9 +162,9 @@          -> m c  -- ^ computation to run in-between          -> m c  -- returns the value from the in-between computation bracket_ before after thing = block $ do-  before+  _ <- before   r <- unblock thing `onException` after-  after+  _ <- after   return r  -- | A specialised variant of 'bracket' with just a computation to run@@ -139,7 +176,7 @@         -> m a -- returns the value from the first computation thing `finally` after = block $ do   r <- unblock thing `onException` after-  after+  _ <- after   return r  -- | Like 'bracket', but only performs the final action if there was an