resourcet 0.3.2.2 → 0.3.3
raw patch · 2 files changed
+36/−2 lines, 2 filesdep +mtlPVP ok
version bump matches the API change (PVP)
Dependencies added: mtl
API changes (from Hackage documentation)
+ Control.Monad.Trans.Resource: instance MonadCont m => MonadCont (ResourceT m)
+ Control.Monad.Trans.Resource: instance MonadError e m => MonadError e (ResourceT m)
+ Control.Monad.Trans.Resource: instance MonadRWS r w s m => MonadRWS r w s (ResourceT m)
+ Control.Monad.Trans.Resource: instance MonadReader r m => MonadReader r (ResourceT m)
+ Control.Monad.Trans.Resource: instance MonadState s m => MonadState s (ResourceT m)
+ Control.Monad.Trans.Resource: instance MonadWriter w m => MonadWriter w (ResourceT m)
Files
- Control/Monad/Trans/Resource.hs +34/−1
- resourcet.cabal +2/−1
Control/Monad/Trans/Resource.hs view
@@ -70,6 +70,13 @@ import Control.Monad.Trans.Writer ( WriterT ) import Control.Monad.Trans.RWS ( RWST ) +import Control.Monad.Cont.Class ( MonadCont (..) )+import Control.Monad.Error.Class ( MonadError (..) )+import Control.Monad.RWS.Class ( MonadRWS (..) )+import Control.Monad.Reader.Class ( MonadReader (..) )+import Control.Monad.State.Class ( MonadState (..) )+import Control.Monad.Writer.Class ( MonadWriter (..) )+ import Data.Word (Word) import qualified Control.Monad.Trans.RWS.Strict as Strict ( RWST )@@ -119,7 +126,7 @@ -- a release action will only ever be called once. -- -- Since 0.3.0-newtype ResourceT m a = ResourceT (I.IORef ReleaseMap -> m a)+newtype ResourceT m a = ResourceT { unResourceT :: I.IORef ReleaseMap -> m a } instance Typeable1 m => Typeable1 (ResourceT m) where typeOf1 = goType undefined@@ -134,6 +141,32 @@ #endif [ typeOf1 m ]++instance MonadCont m => MonadCont (ResourceT m) where+ callCC f = ResourceT $ \i -> callCC $ \c -> unResourceT (f (ResourceT . const . c)) i++instance MonadError e m => MonadError e (ResourceT m) where+ throwError = lift . throwError+ catchError r h = ResourceT $ \i -> unResourceT r i `catchError` \e -> unResourceT (h e) i++instance MonadRWS r w s m => MonadRWS r w s (ResourceT m)++instance MonadReader r m => MonadReader r (ResourceT m) where+ ask = lift ask+ local = mapResourceT . local++mapResourceT :: (m a -> n b) -> ResourceT m a -> ResourceT n b+mapResourceT f = ResourceT . (f .) . unResourceT++instance MonadState s m => MonadState s (ResourceT m) where+ get = lift get+ put = lift . put++instance MonadWriter w m => MonadWriter w (ResourceT m) where+ tell = lift . tell+ listen = mapResourceT listen+ pass = mapResourceT pass+ -- | A @Monad@ which allows for safe resource allocation. In theory, any monad -- transformer stack included a @ResourceT@ can be an instance of
resourcet.cabal view
@@ -1,5 +1,5 @@ Name: resourcet-Version: 0.3.2.2+Version: 0.3.3 Synopsis: Deterministic allocation and freeing of scarce resources. Description: This package was originally included with the conduit package, and has since been split off. For more information, please see <http://www.yesodweb.com/book/conduits>.@@ -20,6 +20,7 @@ , monad-control >= 0.3.1 && < 0.4 , containers , transformers >= 0.2.2 && < 0.4+ , mtl >= 2.0 && < 2.2 ghc-options: -Wall source-repository head