transformers 0.1.3.0 → 0.1.4.0
raw patch · 3 files changed
+24/−25 lines, 3 files
Files
- Control/Monad/Trans/Identity.hs +16/−24
- Control/Monad/Trans/Maybe.hs +7/−0
- transformers.cabal +1/−1
Control/Monad/Trans/Identity.hs view
@@ -14,30 +14,28 @@ module Control.Monad.Trans.Identity ( -- * The identity monad transformer IdentityT(..),+ mapIdentityT, -- * Lifting other operations- liftCallCC, liftCatch,- liftListen,- liftLocal,- liftPass,+ liftCallCC, ) where import Control.Applicative-import Control.Monad (MonadPlus(mzero, mplus), liftM, ap)+import Control.Monad (MonadPlus(mzero, mplus)) import Control.Monad.Trans (MonadIO(liftIO), MonadTrans(lift)) newtype IdentityT m a = IdentityT { runIdentityT :: m a } instance (Functor m) => Functor (IdentityT m) where- fmap f = IdentityT . fmap f . runIdentityT+ fmap f = mapIdentityT (fmap f) instance (Applicative m) => Applicative (IdentityT m) where pure x = IdentityT (pure x)- f <*> v = IdentityT (runIdentityT f <*> runIdentityT v)+ (<*>) = lift2IdentityT (<*>) instance (Alternative m) => Alternative (IdentityT m) where empty = IdentityT empty- f <|> v = IdentityT (runIdentityT f <|> runIdentityT v)+ (<|>) = lift2IdentityT (<|>) instance (Monad m) => Monad (IdentityT m) where return = IdentityT . return@@ -46,7 +44,7 @@ instance (MonadPlus m) => MonadPlus (IdentityT m) where mzero = IdentityT mzero- f `mplus` v = IdentityT (runIdentityT f `mplus` runIdentityT v)+ mplus = lift2IdentityT mplus instance (MonadIO m) => MonadIO (IdentityT m) where liftIO = IdentityT . liftIO@@ -54,6 +52,15 @@ instance MonadTrans IdentityT where lift = IdentityT +-- | Lift a unary operation to the new monad.+mapIdentityT :: (m a -> n b) -> IdentityT m a -> IdentityT n b+mapIdentityT f = IdentityT . f . runIdentityT++-- | Lift a binary operation to the new monad.+lift2IdentityT ::+ (m a -> n b -> p c) -> IdentityT m a -> IdentityT n b -> IdentityT p c+lift2IdentityT f a b = IdentityT (f (runIdentityT a) (runIdentityT b))+ -- | Lift a @callCC@ operation to the new monad. liftCallCC :: (((a -> m b) -> m a) -> m a) -> ((a -> IdentityT m b) -> IdentityT m a) -> IdentityT m a@@ -64,18 +71,3 @@ liftCatch :: (m a -> (e -> m a) -> m a) -> IdentityT m a -> (e -> IdentityT m a) -> IdentityT m a liftCatch f m h = IdentityT $ f (runIdentityT m) (runIdentityT . h)---- | Lift a @listen@ operation to the new monad.-liftListen :: Monad m =>- (m a -> m (a,w)) -> IdentityT m a -> IdentityT m (a,w)-liftListen listen = IdentityT . listen . runIdentityT---- | Lift a @local@ operation to the new monad.-liftLocal :: Monad m => ((r -> r) -> m a -> m a) ->- (r -> r) -> IdentityT m a -> IdentityT m a-liftLocal local f = IdentityT . local f . runIdentityT---- | Lift a @pass@ operation to the new monad.-liftPass :: Monad m => (m (a,w -> w) -> m a) ->- IdentityT m (a,w -> w) -> IdentityT m a-liftPass pass = IdentityT . pass . runIdentityT
Control/Monad/Trans/Maybe.hs view
@@ -14,8 +14,10 @@ module Control.Monad.Trans.Maybe ( -- * The MaybeT monad transformer MaybeT(..),+ mapMaybeT, -- * Lifting other operations liftCallCC,+ liftCatch, liftListen, liftPass, ) where@@ -68,6 +70,11 @@ m (Maybe a)) -> ((a -> MaybeT m b) -> MaybeT m a) -> MaybeT m a liftCallCC callCC f = MaybeT $ callCC $ \ c -> runMaybeT (f (MaybeT . c . Just))++-- | Lift a @catchError@ operation to the new monad.+liftCatch :: (m (Maybe a) -> (e -> m (Maybe a)) -> m (Maybe a)) ->+ MaybeT m a -> (e -> MaybeT m a) -> MaybeT m a+liftCatch f m h = MaybeT $ f (runMaybeT m) (runMaybeT . h) -- | Lift a @listen@ operation to the new monad. liftListen :: Monad m =>
transformers.cabal view
@@ -1,5 +1,5 @@ name: transformers-version: 0.1.3.0+version: 0.1.4.0 license: BSD3 license-file: LICENSE author: Andy Gill