packages feed

monad-control 0.3.1.4 → 0.3.2

raw patch · 2 files changed

+50/−5 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Control.Monad.Trans.Control: defaultLiftWith :: (Monad m, MonadTransControl n) => (forall b. n m b -> t m b) -> (forall o b. t o b -> n o b) -> (forall b. StT n b -> StT t b) -> (Run t -> m a) -> t m a
+ Control.Monad.Trans.Control: defaultRestoreT :: (Monad m, MonadTransControl n) => (n m a -> t m a) -> (StT t a -> StT n a) -> m (StT t a) -> t m a

Files

Control/Monad/Trans/Control.hs view
@@ -30,11 +30,18 @@ -}  module Control.Monad.Trans.Control-    ( MonadTransControl(..), Run+    ( -- * MonadTransControl+      MonadTransControl(..), Run++      -- ** Defaults for MonadTransControl+      -- $MonadTransControlDefaults+    , defaultLiftWith, defaultRestoreT++      -- * MonadBaseControl     , MonadBaseControl (..), RunInBase -      -- * Defaults for MonadBaseControl-      -- $defaults+      -- ** Defaults for MonadBaseControl+      -- $MonadBaseControlDefaults     , ComposeSt, defaultLiftBaseWith, defaultRestoreM        -- * Utility functions@@ -140,6 +147,44 @@   --------------------------------------------------------------------------------+-- Defaults for MonadTransControl+--------------------------------------------------------------------------------++-- $MonadTransControlDefaults+-- Following functions can be used to define 'MonadTransControl' instances for+-- newtypes.+--+-- @{-\# LANGUAGE GeneralizedNewtypeDeriving \#-}+--+-- newtype CounterT m a = CounterT {unCounterT :: StateT Int m a}+--   deriving (Monad, MonadTrans)+--+-- instance MonadTransControl CounterT where+--     newtype StT CounterT a = StCounter {unStCounter :: StT (StateT Int) a}+--     liftWith = 'defaultLiftWith' CounterT unCounterT StCounter+--     restoreT = 'defaultRestoreT' CounterT unStCounter+-- @++-- | Default definition for the 'liftWith' method.+defaultLiftWith ∷ (Monad m, MonadTransControl n)+                ⇒ (∀ b.   n m b → t m b)     -- ^ Monad constructor+                → (∀ o b. t o b → n o b)     -- ^ Monad deconstructor+                → (∀ b.   StT n b → StT t b) -- ^ 'StT' constructor+                → (Run t → m a)+                → t m a+defaultLiftWith t unT stT = \f → t $ liftWith $ \run → f $ liftM stT ∘ run ∘ unT+{-# INLINE defaultLiftWith #-}++defaultRestoreT ∷ (Monad m, MonadTransControl n)+                ⇒ (n m a → t m a)     -- ^ Monad constructor+                → (StT t a → StT n a) -- ^ 'StT' deconstructor+                → m (StT t a)+                → t m a+defaultRestoreT t unStT = t ∘ restoreT ∘ liftM unStT+{-# INLINE defaultRestoreT #-}+++-------------------------------------------------------------------------------- -- MonadTransControl instances -------------------------------------------------------------------------------- @@ -305,7 +350,7 @@ -- Defaults for MonadBaseControl -------------------------------------------------------------------------------- --- $defaults+-- $MonadBaseControlDefaults -- -- Note that by using the following default definitions it's easy to make a -- monad transformer @T@ an instance of 'MonadBaseControl':
monad-control.cabal view
@@ -1,5 +1,5 @@ Name:                monad-control-Version:             0.3.1.4+Version:             0.3.2 Synopsis:            Lift control operations, like exception catching, through monad transformers License:             BSD3 License-file:        LICENSE