control 0.1.0.0 → 0.1.1.0
raw patch · 2 files changed
+16/−1 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.Monad.Base.Control: control :: MonadBaseControl m => (RunInBase m -> Base m (StM m a)) -> m a
+ Control.Monad.Base.Control: liftBaseDiscard :: MonadBaseControl m => (Base m () -> Base m a) -> m () -> m a
+ Control.Monad.Base.Control: liftBaseOp :: MonadBaseControl m => ((a -> Base m (StM m b)) -> Base m (StM m c)) -> (a -> m b) -> m c
+ Control.Monad.Base.Control: liftBaseOpDiscard :: MonadBaseControl m => ((a -> Base m ()) -> Base m b) -> (a -> m ()) -> m b
+ Control.Monad.Base.Control: liftBaseOp_ :: MonadBaseControl m => (Base m (StM m a) -> Base m (StM m b)) -> m a -> m b
Files
- Control/Monad/Base/Control.hs +15/−0
- control.cabal +1/−1
Control/Monad/Base/Control.hs view
@@ -94,3 +94,18 @@ type StM (AccumT a f) b = ComposeSt (AccumT a) f b liftBaseWith = defaultLiftBaseWith restoreM = defaultRestoreM++control :: MonadBaseControl m => (RunInBase m -> Base m (StM m a)) -> m a+control f = liftBaseWith f >>= restoreM++liftBaseOp :: MonadBaseControl m => ((a -> Base m (StM m b)) -> Base m (StM m c)) -> (a -> m b) -> m c+liftBaseOp f = \ g -> control (\ r -> f (r . g))++liftBaseOp_ :: MonadBaseControl m => (Base m (StM m a) -> Base m (StM m b)) -> m a -> m b+liftBaseOp_ f = liftBaseOp (f . ($ ())) . pure++liftBaseDiscard :: MonadBaseControl m => (Base m () -> Base m a) -> m () -> m a+liftBaseDiscard f = \ x -> liftBaseWith (\ r -> f (() <$ r x))++liftBaseOpDiscard :: MonadBaseControl m => ((a -> Base m ()) -> Base m b) -> (a -> m ()) -> m b+liftBaseOpDiscard f = \ g -> liftBaseWith (\ r -> f ((() <$) . r . g))
control.cabal view
@@ -1,5 +1,5 @@ name: control-version: 0.1.0.0+version: 0.1.1.0 synopsis: Class of monad transformers which control operations can be lifted thru -- description: license: BSD3