pipes-safe 2.1.0 → 2.2.0
raw patch · 2 files changed
+16/−10 lines, 2 filesdep ~exceptionsdep ~transformers
Dependency ranges changed: exceptions, transformers
Files
- pipes-safe.cabal +3/−3
- src/Pipes/Safe.hs +13/−7
pipes-safe.cabal view
@@ -1,5 +1,5 @@ Name: pipes-safe-Version: 2.1.0+Version: 2.2.0 Cabal-Version: >=1.8.0.2 Build-Type: Simple License: BSD3@@ -36,8 +36,8 @@ Build-Depends: base >= 4 && < 5 , containers >= 0.3.0.0 && < 0.6,- exceptions >= 0.4 && < 0.6,- transformers >= 0.2.0.0 && < 0.4,+ exceptions >= 0.6 && < 0.7,+ transformers >= 0.2.0.0 && < 0.5, pipes >= 4.0.0 && < 4.2 Exposed-Modules: Pipes.Safe,
src/Pipes/Safe.hs view
@@ -89,6 +89,7 @@ import Control.Monad.Catch ( MonadCatch(..) , MonadThrow(..)+ , MonadMask(..) , mask_ , uninterruptibleMask_ , catchAll@@ -162,11 +163,13 @@ Pure r -> Pure r loop (k unmask) -instance MonadThrow m => MonadThrow (Proxy a' a b' b m) where+instance (MonadThrow m) => MonadThrow (Proxy a' a b' b m) where throwM = lift . throwM -instance (MonadCatch m, MonadIO m) => MonadCatch (Proxy a' a b' b m) where- catch = liftCatchError C.catch+instance (MonadCatch m) => MonadCatch (Proxy a' a b' b m) where+ catch = liftCatchError C.catch++instance (MonadMask m, MonadIO m) => MonadMask (Proxy a' a b' b m) where mask = liftMask mask uninterruptibleMask = liftMask uninterruptibleMask @@ -215,6 +218,9 @@ -- Deriving 'MonadCatch' instance (MonadCatch m) => MonadCatch (SafeT m) where m `catch` f = SafeT (unSafeT m `C.catch` \r -> unSafeT (f r))++-- Deriving 'MonadMask'+instance (MonadMask m) => MonadMask (SafeT m) where mask k = SafeT (mask (\restore -> unSafeT (k (\ma -> SafeT (restore (unSafeT ma)))) )) uninterruptibleMask k = SafeT (uninterruptibleMask (\restore ->@@ -226,7 +232,7 @@ {-| Run the 'SafeT' monad transformer, executing all unreleased finalizers at the end of the computation -}-runSafeT :: (MonadCatch m, MonadIO m) => SafeT m r -> m r+runSafeT :: (MonadMask m, MonadIO m) => SafeT m r -> m r runSafeT m = C.bracket (liftIO $ newIORef $! Finalizers 0 M.empty) (\ioref -> do@@ -241,7 +247,7 @@ Use 'runSafeP' to safely flush all unreleased finalizers and ensure prompt finalization without exiting the 'Proxy' monad. -}-runSafeP :: (MonadCatch m, MonadIO m) => Effect (SafeT m) r -> Effect' m r+runSafeP :: (MonadMask m, MonadIO m) => Effect (SafeT m) r -> Effect' m r runSafeP = lift . runSafeT . runEffect {-# INLINABLE runSafeP #-} @@ -251,7 +257,7 @@ {-| 'MonadSafe' lets you 'register' and 'release' finalizers that execute in a 'Base' monad -}-class (MonadCatch m, MonadIO m, MonadIO (Base m)) => MonadSafe m where+class (MonadCatch m, MonadMask m, MonadIO m, MonadIO (Base m)) => MonadSafe m where {-| The monad used to run resource management actions, corresponding to the monad directly beneath 'SafeT' -}@@ -273,7 +279,7 @@ -} release :: ReleaseKey -> m () -instance (MonadIO m, MonadCatch m) => MonadSafe (SafeT m) where+instance (MonadIO m, MonadCatch m, MonadMask m) => MonadSafe (SafeT m) where type Base (SafeT m) = m liftBase = lift