packages feed

mtl 2.2.0.1 → 2.2.1

raw patch · 8 files changed

+179/−4 lines, 8 filesdep ~basedep ~transformersPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base, transformers

API changes (from Hackage documentation)

- Control.Monad.Cont.Class: instance (Error e, MonadCont m) => MonadCont (ErrorT e m)
- Control.Monad.Cont.Class: instance (Monoid w, MonadCont m) => MonadCont (RWST r w s m)
- Control.Monad.Cont.Class: instance (Monoid w, MonadCont m) => MonadCont (WriterT w m)
- Control.Monad.Cont.Class: instance MonadCont (ContT r m)
- Control.Monad.Cont.Class: instance MonadCont m => MonadCont (ExceptT e m)
- Control.Monad.Cont.Class: instance MonadCont m => MonadCont (IdentityT m)
- Control.Monad.Cont.Class: instance MonadCont m => MonadCont (ListT m)
- Control.Monad.Cont.Class: instance MonadCont m => MonadCont (MaybeT m)
- Control.Monad.Cont.Class: instance MonadCont m => MonadCont (ReaderT r m)
- Control.Monad.Cont.Class: instance MonadCont m => MonadCont (StateT s m)
- Control.Monad.Error.Class: instance (Monad m, Error e) => MonadError e (ErrorT e m)
- Control.Monad.Error.Class: instance (Monoid w, MonadError e m) => MonadError e (RWST r w s m)
- Control.Monad.Error.Class: instance (Monoid w, MonadError e m) => MonadError e (WriterT w m)
- Control.Monad.Error.Class: instance Monad m => MonadError e (ExceptT e m)
- Control.Monad.Error.Class: instance MonadError IOException IO
- Control.Monad.Error.Class: instance MonadError e (Either e)
- Control.Monad.Error.Class: instance MonadError e m => MonadError e (IdentityT m)
- Control.Monad.Error.Class: instance MonadError e m => MonadError e (ListT m)
- Control.Monad.Error.Class: instance MonadError e m => MonadError e (MaybeT m)
- Control.Monad.Error.Class: instance MonadError e m => MonadError e (ReaderT r m)
- Control.Monad.Error.Class: instance MonadError e m => MonadError e (StateT s m)
- Control.Monad.RWS.Class: instance (Error e, MonadRWS r w s m) => MonadRWS r w s (ErrorT e m)
- Control.Monad.RWS.Class: instance (Monoid w, Monad m) => MonadRWS r w s (RWST r w s m)
- Control.Monad.RWS.Class: instance MonadRWS r w s m => MonadRWS r w s (ExceptT e m)
- Control.Monad.RWS.Class: instance MonadRWS r w s m => MonadRWS r w s (IdentityT m)
- Control.Monad.RWS.Class: instance MonadRWS r w s m => MonadRWS r w s (MaybeT m)
- Control.Monad.Reader.Class: instance (Error e, MonadReader r m) => MonadReader r (ErrorT e m)
- Control.Monad.Reader.Class: instance (Monad m, Monoid w) => MonadReader r (RWST r w s m)
- Control.Monad.Reader.Class: instance (Monoid w, MonadReader r m) => MonadReader r (WriterT w m)
- Control.Monad.Reader.Class: instance Monad m => MonadReader r (ReaderT r m)
- Control.Monad.Reader.Class: instance MonadReader r ((->) r)
- Control.Monad.Reader.Class: instance MonadReader r m => MonadReader r (ExceptT e m)
- Control.Monad.Reader.Class: instance MonadReader r m => MonadReader r (IdentityT m)
- Control.Monad.Reader.Class: instance MonadReader r m => MonadReader r (ListT m)
- Control.Monad.Reader.Class: instance MonadReader r m => MonadReader r (MaybeT m)
- Control.Monad.Reader.Class: instance MonadReader r m => MonadReader r (StateT s m)
- Control.Monad.Reader.Class: instance MonadReader r' m => MonadReader r' (ContT r m)
- Control.Monad.State.Class: instance (Error e, MonadState s m) => MonadState s (ErrorT e m)
- Control.Monad.State.Class: instance (Monad m, Monoid w) => MonadState s (RWST r w s m)
- Control.Monad.State.Class: instance (Monoid w, MonadState s m) => MonadState s (WriterT w m)
- Control.Monad.State.Class: instance Monad m => MonadState s (StateT s m)
- Control.Monad.State.Class: instance MonadState s m => MonadState s (ContT r m)
- Control.Monad.State.Class: instance MonadState s m => MonadState s (ExceptT e m)
- Control.Monad.State.Class: instance MonadState s m => MonadState s (IdentityT m)
- Control.Monad.State.Class: instance MonadState s m => MonadState s (ListT m)
- Control.Monad.State.Class: instance MonadState s m => MonadState s (MaybeT m)
- Control.Monad.State.Class: instance MonadState s m => MonadState s (ReaderT r m)
- Control.Monad.Writer.Class: instance (Error e, MonadWriter w m) => MonadWriter w (ErrorT e m)
- Control.Monad.Writer.Class: instance (Monoid w, Monad m) => MonadWriter w (RWST r w s m)
- Control.Monad.Writer.Class: instance (Monoid w, Monad m) => MonadWriter w (WriterT w m)
- Control.Monad.Writer.Class: instance MonadWriter w m => MonadWriter w (ExceptT e m)
- Control.Monad.Writer.Class: instance MonadWriter w m => MonadWriter w (IdentityT m)
- Control.Monad.Writer.Class: instance MonadWriter w m => MonadWriter w (MaybeT m)
- Control.Monad.Writer.Class: instance MonadWriter w m => MonadWriter w (ReaderT r m)
- Control.Monad.Writer.Class: instance MonadWriter w m => MonadWriter w (StateT s m)
+ Control.Monad.Cont: [runContT] :: ContT k a -> (a -> m r) -> m r
+ Control.Monad.Cont.Class: instance (Control.Monad.Trans.Error.Error e, Control.Monad.Cont.Class.MonadCont m) => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Error.ErrorT e m)
+ Control.Monad.Cont.Class: instance (GHC.Base.Monoid w, Control.Monad.Cont.Class.MonadCont m) => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Monad.Cont.Class: instance (GHC.Base.Monoid w, Control.Monad.Cont.Class.MonadCont m) => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Monad.Cont.Class: instance (GHC.Base.Monoid w, Control.Monad.Cont.Class.MonadCont m) => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Control.Monad.Cont.Class: instance (GHC.Base.Monoid w, Control.Monad.Cont.Class.MonadCont m) => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Cont.ContT r m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.List.ListT m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Reader.ReaderT r m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.State.Lazy.StateT s m)
+ Control.Monad.Cont.Class: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.State.Strict.StateT s m)
+ Control.Monad.Error: [runErrorT] :: ErrorT e a -> m (Either e a)
+ Control.Monad.Error.Class: instance (GHC.Base.Monad m, Control.Monad.Trans.Error.Error e) => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Error.ErrorT e m)
+ Control.Monad.Error.Class: instance (GHC.Base.Monoid w, Control.Monad.Error.Class.MonadError e m) => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Monad.Error.Class: instance (GHC.Base.Monoid w, Control.Monad.Error.Class.MonadError e m) => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Monad.Error.Class: instance (GHC.Base.Monoid w, Control.Monad.Error.Class.MonadError e m) => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Control.Monad.Error.Class: instance (GHC.Base.Monoid w, Control.Monad.Error.Class.MonadError e m) => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError GHC.IO.Exception.IOException GHC.Types.IO
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError e (Data.Either.Either e)
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.List.ListT m)
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Reader.ReaderT r m)
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.State.Lazy.StateT s m)
+ Control.Monad.Error.Class: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.State.Strict.StateT s m)
+ Control.Monad.Error.Class: instance GHC.Base.Monad m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Monad.Except: ExceptT :: m (Either e a) -> ExceptT e a
+ Control.Monad.Except: catchError :: MonadError e m => m a -> (e -> m a) -> m a
+ Control.Monad.Except: class (Monad m) => MonadError e m | m -> e
+ Control.Monad.Except: mapExcept :: (Either e a -> Either e' b) -> Except e a -> Except e' b
+ Control.Monad.Except: mapExceptT :: (m (Either e a) -> n (Either e' b)) -> ExceptT e m a -> ExceptT e' n b
+ Control.Monad.Except: newtype ExceptT e (m :: * -> *) a :: * -> (* -> *) -> * -> *
+ Control.Monad.Except: runExcept :: Except e a -> Either e a
+ Control.Monad.Except: runExceptT :: ExceptT e m a -> m (Either e a)
+ Control.Monad.Except: throwError :: MonadError e m => e -> m a
+ Control.Monad.Except: type Except e = ExceptT e Identity
+ Control.Monad.Except: withExcept :: (e -> e') -> Except e a -> Except e' a
+ Control.Monad.Except: withExceptT :: Functor m => (e -> e') -> ExceptT e m a -> ExceptT e' m a
+ Control.Monad.List: [runListT] :: ListT a -> m [a]
+ Control.Monad.RWS.Class: instance (Control.Monad.Trans.Error.Error e, Control.Monad.RWS.Class.MonadRWS r w s m) => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.Error.ErrorT e m)
+ Control.Monad.RWS.Class: instance (GHC.Base.Monoid w, GHC.Base.Monad m) => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Monad.RWS.Class: instance (GHC.Base.Monoid w, GHC.Base.Monad m) => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Monad.RWS.Class: instance Control.Monad.RWS.Class.MonadRWS r w s m => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Monad.RWS.Class: instance Control.Monad.RWS.Class.MonadRWS r w s m => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Monad.RWS.Class: instance Control.Monad.RWS.Class.MonadRWS r w s m => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Monad.RWS.Lazy: [runRWST] :: RWST r w s a -> r -> s -> m (a, s, w)
+ Control.Monad.RWS.Strict: [runRWST] :: RWST r w s a -> r -> s -> m (a, s, w)
+ Control.Monad.Reader: [runReaderT] :: ReaderT k r -> r -> m a
+ Control.Monad.Reader.Class: instance (Control.Monad.Trans.Error.Error e, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Error.ErrorT e m)
+ Control.Monad.Reader.Class: instance (GHC.Base.Monad m, GHC.Base.Monoid w) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Monad.Reader.Class: instance (GHC.Base.Monad m, GHC.Base.Monoid w) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Monad.Reader.Class: instance (GHC.Base.Monoid w, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Control.Monad.Reader.Class: instance (GHC.Base.Monoid w, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r ((->) r)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.List.ListT m)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.State.Lazy.StateT s m)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.State.Strict.StateT s m)
+ Control.Monad.Reader.Class: instance Control.Monad.Reader.Class.MonadReader r' m => Control.Monad.Reader.Class.MonadReader r' (Control.Monad.Trans.Cont.ContT r m)
+ Control.Monad.Reader.Class: instance GHC.Base.Monad m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Reader.ReaderT r m)
+ Control.Monad.State.Class: instance (Control.Monad.Trans.Error.Error e, Control.Monad.State.Class.MonadState s m) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Error.ErrorT e m)
+ Control.Monad.State.Class: instance (GHC.Base.Monad m, GHC.Base.Monoid w) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Monad.State.Class: instance (GHC.Base.Monad m, GHC.Base.Monoid w) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Monad.State.Class: instance (GHC.Base.Monoid w, Control.Monad.State.Class.MonadState s m) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Control.Monad.State.Class: instance (GHC.Base.Monoid w, Control.Monad.State.Class.MonadState s m) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Monad.State.Class: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Cont.ContT r m)
+ Control.Monad.State.Class: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Monad.State.Class: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Monad.State.Class: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.List.ListT m)
+ Control.Monad.State.Class: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Monad.State.Class: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Reader.ReaderT r m)
+ Control.Monad.State.Class: instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.State.Lazy.StateT s m)
+ Control.Monad.State.Class: instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.State.Strict.StateT s m)
+ Control.Monad.State.Lazy: [runStateT] :: StateT s a -> s -> m (a, s)
+ Control.Monad.State.Strict: [runStateT] :: StateT s a -> s -> m (a, s)
+ Control.Monad.Writer.Class: instance (Control.Monad.Trans.Error.Error e, Control.Monad.Writer.Class.MonadWriter w m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Error.ErrorT e m)
+ Control.Monad.Writer.Class: instance (GHC.Base.Monoid w, GHC.Base.Monad m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Monad.Writer.Class: instance (GHC.Base.Monoid w, GHC.Base.Monad m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Monad.Writer.Class: instance (GHC.Base.Monoid w, GHC.Base.Monad m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Control.Monad.Writer.Class: instance (GHC.Base.Monoid w, GHC.Base.Monad m) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Monad.Writer.Class: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Monad.Writer.Class: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Monad.Writer.Class: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Monad.Writer.Class: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Reader.ReaderT r m)
+ Control.Monad.Writer.Class: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.State.Lazy.StateT s m)
+ Control.Monad.Writer.Class: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.State.Strict.StateT s m)
+ Control.Monad.Writer.Lazy: [runWriterT] :: WriterT w a -> m (a, w)
+ Control.Monad.Writer.Strict: [runWriterT] :: WriterT w a -> m (a, w)
- Control.Monad.Cont: ContT :: ((a -> m r) -> m r) -> ContT r a
+ Control.Monad.Cont: ContT :: ((a -> m r) -> m r) -> ContT k a
- Control.Monad.Cont: mapContT :: (m r -> m r) -> ContT r m a -> ContT r m a
+ Control.Monad.Cont: mapContT :: (m r -> m r) -> ContT k r m a -> ContT k r m a
- Control.Monad.Cont: newtype ContT r (m :: * -> *) a :: * -> (* -> *) -> * -> *
+ Control.Monad.Cont: newtype ContT k (r :: k) (m :: k -> *) a :: forall k. k -> (k -> *) -> * -> *
- Control.Monad.Cont: runContT :: ContT r m a -> (a -> m r) -> m r
+ Control.Monad.Cont: runContT :: ContT k r m a -> (a -> m r) -> m r
- Control.Monad.Cont: type Cont r = ContT r Identity
+ Control.Monad.Cont: type Cont r = ContT * r Identity
- Control.Monad.Cont: withContT :: ((b -> m r) -> a -> m r) -> ContT r m a -> ContT r m b
+ Control.Monad.Cont: withContT :: ((b -> m r) -> a -> m r) -> ContT k r m a -> ContT k r m b
- Control.Monad.Error: class Monad m => MonadError e m | m -> e
+ Control.Monad.Error: class (Monad m) => MonadError e m | m -> e
- Control.Monad.Error.Class: class Monad m => MonadError e m | m -> e
+ Control.Monad.Error.Class: class (Monad m) => MonadError e m | m -> e
- Control.Monad.Reader: ReaderT :: (r -> m a) -> ReaderT r a
+ Control.Monad.Reader: ReaderT :: (r -> m a) -> ReaderT k r
- Control.Monad.Reader: class Monad m => MonadReader r m | m -> r where reader f = do { r <- ask; return (f r) }
+ Control.Monad.Reader: class Monad m => MonadReader r m | m -> r where ask = reader id reader f = do { r <- ask; return (f r) }
- Control.Monad.Reader: mapReaderT :: (m a -> n b) -> ReaderT r m a -> ReaderT r n b
+ Control.Monad.Reader: mapReaderT :: (m a -> n b) -> ReaderT k1 r m a -> ReaderT k r n b
- Control.Monad.Reader: newtype ReaderT r (m :: * -> *) a :: * -> (* -> *) -> * -> *
+ Control.Monad.Reader: newtype ReaderT k r (m :: k -> *) (a :: k) :: forall k. * -> (k -> *) -> k -> *
- Control.Monad.Reader: runReaderT :: ReaderT r m a -> r -> m a
+ Control.Monad.Reader: runReaderT :: ReaderT k r m a -> r -> m a
- Control.Monad.Reader: type Reader r = ReaderT r Identity
+ Control.Monad.Reader: type Reader r = ReaderT * r Identity
- Control.Monad.Reader: withReaderT :: (r' -> r) -> ReaderT r m a -> ReaderT r' m a
+ Control.Monad.Reader: withReaderT :: (r' -> r) -> ReaderT k r m a -> ReaderT k r' m a
- Control.Monad.Reader.Class: class Monad m => MonadReader r m | m -> r where reader f = do { r <- ask; return (f r) }
+ Control.Monad.Reader.Class: class Monad m => MonadReader r m | m -> r where ask = reader id reader f = do { r <- ask; return (f r) }

Files

CHANGELOG.markdown view
@@ -1,3 +1,10 @@+2.2.1+-------+* Provide MINIMAL pragmas for `MonadState`, `MonadWriter`, `MonadReader`+* Added a cyclic definition of `ask` in terms of `reader` for consistency with `get`/`put` vs. `state` and `tell` vs. `writer`+* Fix deprecation warnings caused by `transformers` 0.4 deprecating `ErrorT`.+* Added `Control.Monad.Except` in the style of the other `mtl` re-export modules+ 2.2.0.1 ------- * Fixed a bug caused by the change in how `transformers` 0.4 exports its data types. We will now export `runFooT` for each transformer again!
Control/Monad/Error.hs view
@@ -32,7 +32,8 @@   inspired by the Haskell Monad Template Library from     Andy Gill (<http://web.cecs.pdx.edu/~andy/>) -}-module Control.Monad.Error (+module Control.Monad.Error+  {-# DEPRECATED "Use Control.Monad.Except instead" #-} (     -- * Monads with error handling     MonadError(..),     Error(..),
Control/Monad/Error/Class.hs view
@@ -40,7 +40,7 @@     MonadError(..),   ) where -import Control.Monad.Trans.Except (Except(..), ExceptT)+import Control.Monad.Trans.Except (Except, ExceptT) import Control.Monad.Trans.Error (Error(..), ErrorT) import qualified Control.Monad.Trans.Except as ExceptT (throwE, catchE) import qualified Control.Monad.Trans.Error as ErrorT (throwError, catchError)
+ Control/Monad/Except.hs view
@@ -0,0 +1,153 @@+{-# LANGUAGE CPP #-}+{- |+Module      :  Control.Monad.Error+Copyright   :  (c) Michael Weber <michael.weber@post.rwth-aachen.de> 2001,+               (c) Jeff Newbern 2003-2006,+               (c) Andriy Palamarchuk 2006+License     :  BSD-style (see the file LICENSE)++Maintainer  :  libraries@haskell.org+Stability   :  experimental+Portability :  non-portable (multi-parameter type classes)++[Computation type:] Computations which may fail or throw exceptions.++[Binding strategy:] Failure records information about the cause\/location+of the failure. Failure values bypass the bound function,+other values are used as inputs to the bound function.++[Useful for:] Building computations from sequences of functions that may fail+or using exception handling to structure error handling.++[Example type:] @'Data.Either' String a@++The Error monad (also called the Exception monad).+-}++{-+  Rendered by Michael Weber <mailto:michael.weber@post.rwth-aachen.de>,+  inspired by the Haskell Monad Template Library from+    Andy Gill (<http://web.cecs.pdx.edu/~andy/>)+-}+module Control.Monad.Except+  (+    -- * Monads with error handling+    MonadError(..),+    -- * The ErrorT monad transformer+    ExceptT(ExceptT),+    Except,++    runExceptT,+    mapExceptT,+    withExceptT,+    runExcept,+    mapExcept,+    withExcept,++    module Control.Monad,+    module Control.Monad.Fix,+    module Control.Monad.Trans,+    -- * Example 1: Custom Error Data Type+    -- $customErrorExample++    -- * Example 2: Using ExceptT Monad Transformer+    -- $ExceptTExample+  ) where++import Control.Monad.Error.Class+import Control.Monad.Trans+import Control.Monad.Trans.Except+  ( ExceptT(ExceptT), Except, except+  , runExcept, runExceptT+  , mapExcept, mapExceptT+  , withExcept, withExceptT+  )++import Control.Monad+import Control.Monad.Fix++#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 707+import Control.Monad.Instances ()+#endif++{- $customErrorExample+Here is an example that demonstrates the use of a custom error data type with+the 'throwError' and 'catchError' exception mechanism from 'MonadError'.+The example throws an exception if the user enters an empty string+or a string longer than 5 characters. Otherwise it prints length of the string.++>-- This is the type to represent length calculation error.+>data LengthError = EmptyString  -- Entered string was empty.+>          | StringTooLong Int   -- A string is longer than 5 characters.+>                                -- Records a length of the string.+>          | OtherError String   -- Other error, stores the problem description.+>+>-- Converts LengthError to a readable message.+>instance Show LengthError where+>  show EmptyString = "The string was empty!"+>  show (StringTooLong len) =+>      "The length of the string (" ++ (show len) ++ ") is bigger than 5!"+>  show (OtherError msg) = msg+>+>-- For our monad type constructor, we use Either LengthError+>-- which represents failure using Left LengthError+>-- or a successful result of type a using Right a.+>type LengthMonad = Either LengthError+>+>main = do+>  putStrLn "Please enter a string:"+>  s <- getLine+>  reportResult (calculateLength s)+>+>-- Wraps length calculation to catch the errors.+>-- Returns either length of the string or an error.+>calculateLength :: String -> LengthMonad Int+>calculateLength s = (calculateLengthOrFail s) `catchError` Left+>+>-- Attempts to calculate length and throws an error if the provided string is+>-- empty or longer than 5 characters.+>-- The processing is done in Either monad.+>calculateLengthOrFail :: String -> LengthMonad Int+>calculateLengthOrFail [] = throwError EmptyString+>calculateLengthOrFail s | len > 5 = throwError (StringTooLong len)+>                        | otherwise = return len+>  where len = length s+>+>-- Prints result of the string length calculation.+>reportResult :: LengthMonad Int -> IO ()+>reportResult (Right len) = putStrLn ("The length of the string is " ++ (show len))+>reportResult (Left e) = putStrLn ("Length calculation failed with error: " ++ (show e))+-}++{- $ExceptTExample+@'ExceptT'@ monad transformer can be used to add error handling to another monad.+Here is an example how to combine it with an @IO@ monad:++>import Control.Monad.Except+>+>-- An IO monad which can return String failure.+>-- It is convenient to define the monad type of the combined monad,+>-- especially if we combine more monad transformers.+>type LengthMonad = ExceptT String IO+>+>main = do+>  -- runExceptT removes the ExceptT wrapper+>  r <- runExceptT calculateLength+>  reportResult r+>+>-- Asks user for a non-empty string and returns its length.+>-- Throws an error if user enters an empty string.+>calculateLength :: LengthMonad Int+>calculateLength = do+>  -- all the IO operations have to be lifted to the IO monad in the monad stack+>  liftIO $ putStrLn "Please enter a non-empty string: "+>  s <- liftIO getLine+>  if null s+>    then throwError "The string was empty!"+>    else return $ length s+>+>-- Prints result of the string length calculation.+>reportResult :: Either String Int -> IO ()+>reportResult (Right len) = putStrLn ("The length of the string is " ++ (show len))+>reportResult (Left e) = putStrLn ("Length calculation failed with error: " ++ (show e))+-}
Control/Monad/Reader/Class.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE UndecidableInstances #-} -- Search for UndecidableInstances to see why this is needed {- |@@ -69,8 +70,12 @@ -- Note, the partially applied function type @(->) r@ is a simple reader monad. -- See the @instance@ declaration below. class Monad m => MonadReader r m | m -> r where+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707+    {-# MINIMAL (ask | reader), local #-}+#endif     -- | Retrieves the monad environment.     ask   :: m r+    ask = reader id      -- | Executes a computation in a modified environment.     local :: (r -> r) -- ^ The function to modify the environment.
Control/Monad/State/Class.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE UndecidableInstances #-} -- Search for UndecidableInstances to see why this is needed @@ -65,6 +66,9 @@       let ~(a, s') = f s       put s'       return a+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707+    {-# MINIMAL state | get, put #-}+#endif  -- | Monadic state transformer. --
Control/Monad/Writer/Class.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE UndecidableInstances #-} -- Search for UndecidableInstances to see why this is needed @@ -59,6 +60,9 @@ -- the written object.  class (Monoid w, Monad m) => MonadWriter w m | m -> w where+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707+    {-# MINIMAL (writer | tell), listen, pass #-}+#endif     -- | @'writer' (a,w)@ embeds a simple writer action.     writer :: (a,w) -> m a     writer ~(a, w) = do
mtl.cabal view
@@ -1,5 +1,5 @@ name:         mtl-version:      2.2.0.1+version:      2.2.1 cabal-version: >= 1.6 license:      BSD3 license-file: LICENSE@@ -28,6 +28,7 @@     Control.Monad.Cont.Class     Control.Monad.Error     Control.Monad.Error.Class+    Control.Monad.Except     Control.Monad.Identity     Control.Monad.List     Control.Monad.RWS@@ -50,4 +51,4 @@     MultiParamTypeClasses     FunctionalDependencies     FlexibleInstances-  ghc-options: -Wall -fno-warn-unused-imports+  ghc-options: -Wall -fno-warn-unused-imports -fno-warn-warnings-deprecations