packages feed

monad-finally 0.1.1 → 0.1.2

raw patch · 2 files changed

+19/−3 lines, 2 filesdep ~monad-abort-fddep ~transformers-compatPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: monad-abort-fd, transformers-compat

API changes (from Hackage documentation)

+ Control.Monad.Finally: instance (Control.Monad.Finally.MonadFinally μ, GHC.Base.Monoid w) => Control.Monad.Finally.MonadFinally (Control.Monad.Trans.Accum.AccumT w μ)

Files

monad-finally.cabal view
@@ -1,5 +1,5 @@ Name: monad-finally-Version: 0.1.1+Version: 0.1.2 Category: Control Stability: experimental Synopsis: Guard monadic computations with cleanup actions@@ -35,10 +35,10 @@ Library   Build-Depends: base >= 4.4 && < 5   Build-Depends: transformers        >= 0.2-               , transformers-compat >= 0.5+               , transformers-compat >= 0.6.1                , transformers-base   >= 0.4                , transformers-abort  >= 0.6-               , monad-abort-fd      >= 0.6+               , monad-abort-fd      >= 0.6.2                , monad-control       >= 1.0   Hs-Source-Dirs: src   GHC-Options: -Wall
src/Control/Monad/Finally.hs view
@@ -34,6 +34,7 @@ import qualified Control.Monad.Trans.Writer.Strict as SW import qualified Control.Monad.Trans.RWS.Lazy as L import qualified Control.Monad.Trans.RWS.Strict as S+import Control.Monad.Trans.Accum import Control.Monad.Trans.Abort import Control.Monad.Trans.Finish import qualified Control.Exception as E@@ -255,6 +256,21 @@                   Nothing → S.runRWST (release ar Nothing) r s')                (\(ar, s', aw) → S.runRWST (S.tell aw >> m ar) r s')     return ((mr, fr), s''', w `mappend` w')++instance (MonadFinally μ, Monoid w) ⇒ MonadFinally (AccumT w μ) where+  finally' m f = AccumT $ \w → do+    ~(~(mr, _), ~(fr, w'')) ← finally' (runAccumT m w) $ \case+      Just ~(a, w') → runAccumT (f $ Just a) w'+      Nothing       → runAccumT (f Nothing) w+    return ((mr, fr), w'')+  bracket' acquire release m = AccumT $ \w → do+    ~(~(mr, _), ~(fr, w''')) ←+      bracket' (runAccumT acquire w)+               (\ ~(ar, w') → \case+                  Just ~(mr, w'') → runAccumT (release ar (Just mr)) w''+                  Nothing → runAccumT (release ar Nothing) w')+               (\ ~(ar, w') → runAccumT (m ar) w')+    return ((mr, fr), w''')  -- | Run the provided list of cleanup actions sequentually, attempting to run -- the next action even if the previous one did not produce a result.