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 +49/−4
- monad-control.cabal +1/−1
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