Hello community, here is the log from the commit of package ghc-mtl for openSUSE:Factory checked in at 2015-08-23 15:43:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-mtl (Old) and /work/SRC/openSUSE:Factory/.ghc-mtl.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-mtl" Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-mtl/ghc-mtl.changes 2015-05-11 19:48:40.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ghc-mtl.new/ghc-mtl.changes 2015-08-23 17:39:00.000000000 +0200 @@ -1,0 +2,13 @@ +Tue May 12 14:36:33 UTC 2015 - [email protected] + +- update to 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 +* 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! +* `transformers` 0.4 support +* Added instances for `ExceptT` +* Added `modify'` to `Control.Monad.State.*` + +------------------------------------------------------------------- Old: ---- mtl-2.1.3.1.tar.gz New: ---- mtl-2.2.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-mtl.spec ++++++ --- /var/tmp/diff_new_pack.H6D6G1/_old 2015-08-23 17:39:01.000000000 +0200 +++ /var/tmp/diff_new_pack.H6D6G1/_new 2015-08-23 17:39:01.000000000 +0200 @@ -18,7 +18,7 @@ %global pkg_name mtl Name: ghc-mtl -Version: 2.1.3.1 +Version: 2.2.1 Release: 0 Summary: Monad classes, using functional dependencies License: BSD-3-Clause ++++++ mtl-2.1.3.1.tar.gz -> mtl-2.2.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/CHANGELOG.markdown new/mtl-2.2.1/CHANGELOG.markdown --- old/mtl-2.1.3.1/CHANGELOG.markdown 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/CHANGELOG.markdown 2014-06-02 04:22:37.000000000 +0200 @@ -1,3 +1,20 @@ +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! + +2.2 +--- +* `transformers` 0.4 support +* Added instances for `ExceptT` +* Added `modify'` to `Control.Monad.State.*` + 2.1.3.1 ------- * Avoid importing `Control.Monad.Instances` on GHC 7.8 to build without deprecation warnings. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Cont/Class.hs new/mtl-2.2.1/Control/Monad/Cont/Class.hs --- old/mtl-2.1.3.1/Control/Monad/Cont/Class.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Cont/Class.hs 2014-06-02 04:22:37.000000000 +0200 @@ -55,6 +55,7 @@ import Control.Monad.Trans.Cont (ContT) import qualified Control.Monad.Trans.Cont as ContT import Control.Monad.Trans.Error as Error +import Control.Monad.Trans.Except as Except import Control.Monad.Trans.Identity as Identity import Control.Monad.Trans.List as List import Control.Monad.Trans.Maybe as Maybe @@ -99,6 +100,9 @@ instance (Error e, MonadCont m) => MonadCont (ErrorT e m) where callCC = Error.liftCallCC callCC +instance MonadCont m => MonadCont (ExceptT e m) where + callCC = Except.liftCallCC callCC + instance MonadCont m => MonadCont (IdentityT m) where callCC = Identity.liftCallCC callCC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Cont.hs new/mtl-2.2.1/Control/Monad/Cont.hs --- old/mtl-2.1.3.1/Control/Monad/Cont.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Cont.hs 2014-06-02 04:22:37.000000000 +0200 @@ -58,7 +58,8 @@ mapCont, withCont, -- * The ContT monad transformer - ContT(..), + ContT(ContT), + runContT, mapContT, withContT, module Control.Monad, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Error/Class.hs new/mtl-2.2.1/Control/Monad/Error/Class.hs --- old/mtl-2.1.3.1/Control/Monad/Error/Class.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Error/Class.hs 2014-06-02 04:22:37.000000000 +0200 @@ -40,7 +40,9 @@ MonadError(..), ) where +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) import Control.Monad.Trans.Identity as Identity import Control.Monad.Trans.List as List @@ -111,6 +113,10 @@ throwError = ErrorT.throwError catchError = ErrorT.catchError +instance Monad m => MonadError e (ExceptT e m) where + throwError = ExceptT.throwE + catchError = ExceptT.catchE + -- --------------------------------------------------------------------------- -- Instances for other mtl transformers -- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Error.hs new/mtl-2.2.1/Control/Monad/Error.hs --- old/mtl-2.1.3.1/Control/Monad/Error.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Error.hs 2014-06-02 04:22:37.000000000 +0200 @@ -32,12 +32,14 @@ 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(..), -- * The ErrorT monad transformer - ErrorT(..), + ErrorT(ErrorT), + runErrorT, mapErrorT, module Control.Monad, module Control.Monad.Fix, @@ -51,7 +53,7 @@ import Control.Monad.Error.Class import Control.Monad.Trans -import Control.Monad.Trans.Error (ErrorT(..), mapErrorT) +import Control.Monad.Trans.Error (ErrorT(ErrorT), runErrorT, mapErrorT) import Control.Monad import Control.Monad.Fix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Except.hs new/mtl-2.2.1/Control/Monad/Except.hs --- old/mtl-2.1.3.1/Control/Monad/Except.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Except.hs 2014-06-02 04:22:37.000000000 +0200 @@ -0,0 +1,153 @@ +{-# LANGUAGE CPP #-} +{- | +Module : Control.Monad.Error +Copyright : (c) Michael Weber <[email protected]> 2001, + (c) Jeff Newbern 2003-2006, + (c) Andriy Palamarchuk 2006 +License : BSD-style (see the file LICENSE) + +Maintainer : [email protected] +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:[email protected]>, + 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)) +-} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/RWS/Class.hs new/mtl-2.2.1/Control/Monad/RWS/Class.hs --- old/mtl-2.1.3.1/Control/Monad/RWS/Class.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/RWS/Class.hs 2014-06-02 04:22:37.000000000 +0200 @@ -33,6 +33,7 @@ import Control.Monad.Trans.Class import Control.Monad.Trans.Error(Error, ErrorT) +import Control.Monad.Trans.Except(ExceptT) import Control.Monad.Trans.Maybe(MaybeT) import Control.Monad.Trans.Identity(IdentityT) import Control.Monad.Trans.RWS.Lazy as Lazy (RWST) @@ -53,6 +54,7 @@ -- All of these instances need UndecidableInstances, -- because they do not satisfy the coverage condition. +instance MonadRWS r w s m => MonadRWS r w s (ExceptT e m) instance (Error e, MonadRWS r w s m) => MonadRWS r w s (ErrorT e m) instance MonadRWS r w s m => MonadRWS r w s (IdentityT m) instance MonadRWS r w s m => MonadRWS r w s (MaybeT m) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/RWS/Lazy.hs new/mtl-2.2.1/Control/Monad/RWS/Lazy.hs --- old/mtl-2.1.3.1/Control/Monad/RWS/Lazy.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/RWS/Lazy.hs 2014-06-02 04:22:37.000000000 +0200 @@ -27,7 +27,8 @@ mapRWS, withRWS, -- * The RWST monad transformer - RWST(..), + RWST(RWST), + runRWST, evalRWST, execRWST, mapRWST, @@ -45,7 +46,7 @@ import Control.Monad.Trans import Control.Monad.Trans.RWS.Lazy ( RWS, rws, runRWS, evalRWS, execRWS, mapRWS, withRWS, - RWST(..), evalRWST, execRWST, mapRWST, withRWST) + RWST(RWST), runRWST, evalRWST, execRWST, mapRWST, withRWST) import Control.Monad import Control.Monad.Fix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/RWS/Strict.hs new/mtl-2.2.1/Control/Monad/RWS/Strict.hs --- old/mtl-2.1.3.1/Control/Monad/RWS/Strict.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/RWS/Strict.hs 2014-06-02 04:22:37.000000000 +0200 @@ -27,7 +27,8 @@ mapRWS, withRWS, -- * The RWST monad transformer - RWST(..), + RWST(RWST), + runRWST, evalRWST, execRWST, mapRWST, @@ -45,7 +46,7 @@ import Control.Monad.Trans import Control.Monad.Trans.RWS.Strict ( RWS, rws, runRWS, evalRWS, execRWS, mapRWS, withRWS, - RWST(..), evalRWST, execRWST, mapRWST, withRWST) + RWST(RWST), runRWST, evalRWST, execRWST, mapRWST, withRWST) import Control.Monad import Control.Monad.Fix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Reader/Class.hs new/mtl-2.2.1/Control/Monad/Reader/Class.hs --- old/mtl-2.1.3.1/Control/Monad/Reader/Class.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Reader/Class.hs 2014-06-02 04:22:37.000000000 +0200 @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE UndecidableInstances #-} -- Search for UndecidableInstances to see why this is needed {- | @@ -43,6 +44,7 @@ ) where import Control.Monad.Trans.Cont as Cont +import Control.Monad.Trans.Except import Control.Monad.Trans.Error import Control.Monad.Trans.Identity import Control.Monad.Trans.List @@ -68,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. @@ -128,6 +134,11 @@ local = mapErrorT . local reader = lift . reader +instance MonadReader r m => MonadReader r (ExceptT e m) where + ask = lift ask + local = mapExceptT . local + reader = lift . reader + instance MonadReader r m => MonadReader r (IdentityT m) where ask = lift ask local = mapIdentityT . local diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Reader.hs new/mtl-2.2.1/Control/Monad/Reader.hs --- old/mtl-2.1.3.1/Control/Monad/Reader.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Reader.hs 2014-06-02 04:22:37.000000000 +0200 @@ -45,7 +45,8 @@ mapReader, withReader, -- * The ReaderT monad transformer - ReaderT(..), + ReaderT(ReaderT), + runReaderT, mapReaderT, withReaderT, module Control.Monad, @@ -65,7 +66,7 @@ import Control.Monad.Trans.Reader ( Reader, runReader, mapReader, withReader, - ReaderT(..), mapReaderT, withReaderT) + ReaderT(ReaderT), runReaderT, mapReaderT, withReaderT) import Control.Monad.Trans import Control.Monad diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/State/Class.hs new/mtl-2.2.1/Control/Monad/State/Class.hs --- old/mtl-2.1.3.1/Control/Monad/State/Class.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/State/Class.hs 2014-06-02 04:22:37.000000000 +0200 @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE UndecidableInstances #-} -- Search for UndecidableInstances to see why this is needed @@ -24,11 +25,13 @@ module Control.Monad.State.Class ( MonadState(..), modify, - gets, + modify', + gets ) where import Control.Monad.Trans.Cont import Control.Monad.Trans.Error +import Control.Monad.Trans.Except import Control.Monad.Trans.Identity import Control.Monad.Trans.List import Control.Monad.Trans.Maybe @@ -63,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. -- @@ -78,6 +84,11 @@ modify :: MonadState s m => (s -> s) -> m () modify f = state (\s -> ((), f s)) +-- | A variant of 'modify' in which the computation is strict in the +-- new state. +modify' :: MonadState s m => (s -> s) -> m () +modify' f = state (\s -> let s' = f s in s' `seq` ((), s')) + -- | Gets specific component of the state, using a projection function -- supplied. gets :: MonadState s m => (s -> a) -> m a @@ -120,6 +131,11 @@ get = lift get put = lift . put state = lift . state + +instance MonadState s m => MonadState s (ExceptT e m) where + get = lift get + put = lift . put + state = lift . state instance MonadState s m => MonadState s (IdentityT m) where get = lift get diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/State/Lazy.hs new/mtl-2.2.1/Control/Monad/State/Lazy.hs --- old/mtl-2.1.3.1/Control/Monad/State/Lazy.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/State/Lazy.hs 2014-06-02 04:22:37.000000000 +0200 @@ -22,6 +22,7 @@ -- * MonadState class MonadState(..), modify, + modify', gets, -- * The State monad State, @@ -31,7 +32,8 @@ mapState, withState, -- * The StateT monad transformer - StateT(..), + StateT(StateT), + runStateT, evalStateT, execStateT, mapStateT, @@ -48,7 +50,7 @@ import Control.Monad.Trans import Control.Monad.Trans.State.Lazy (State, runState, evalState, execState, mapState, withState, - StateT(..), evalStateT, execStateT, mapStateT, withStateT) + StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) import Control.Monad import Control.Monad.Fix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/State/Strict.hs new/mtl-2.2.1/Control/Monad/State/Strict.hs --- old/mtl-2.1.3.1/Control/Monad/State/Strict.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/State/Strict.hs 2014-06-02 04:22:37.000000000 +0200 @@ -22,6 +22,7 @@ -- * MonadState class MonadState(..), modify, + modify', gets, -- * The State monad State, @@ -31,7 +32,8 @@ mapState, withState, -- * The StateT monad transformer - StateT(..), + StateT(StateT), + runStateT, evalStateT, execStateT, mapStateT, @@ -48,7 +50,7 @@ import Control.Monad.Trans import Control.Monad.Trans.State.Strict (State, runState, evalState, execState, mapState, withState, - StateT(..), evalStateT, execStateT, mapStateT, withStateT) + StateT(StateT), runStateT, evalStateT, execStateT, mapStateT, withStateT) import Control.Monad import Control.Monad.Fix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Writer/Class.hs new/mtl-2.2.1/Control/Monad/Writer/Class.hs --- old/mtl-2.1.3.1/Control/Monad/Writer/Class.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Writer/Class.hs 2014-06-02 04:22:37.000000000 +0200 @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE UndecidableInstances #-} -- Search for UndecidableInstances to see why this is needed @@ -27,6 +28,7 @@ ) where import Control.Monad.Trans.Error as Error +import Control.Monad.Trans.Except as Except import Control.Monad.Trans.Identity as Identity import Control.Monad.Trans.Maybe as Maybe import Control.Monad.Trans.Reader @@ -58,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 @@ -131,6 +136,12 @@ listen = Error.liftListen listen pass = Error.liftPass pass +instance MonadWriter w m => MonadWriter w (ExceptT e m) where + writer = lift . writer + tell = lift . tell + listen = Except.liftListen listen + pass = Except.liftPass pass + instance MonadWriter w m => MonadWriter w (IdentityT m) where writer = lift . writer tell = lift . tell diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/Control/Monad/Writer/Lazy.hs new/mtl-2.2.1/Control/Monad/Writer/Lazy.hs --- old/mtl-2.1.3.1/Control/Monad/Writer/Lazy.hs 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/Control/Monad/Writer/Lazy.hs 2014-06-02 04:22:37.000000000 +0200 @@ -28,7 +28,8 @@ execWriter, mapWriter, -- * The WriterT monad transformer - WriterT(..), + WriterT(WriterT), + runWriterT, execWriterT, mapWriterT, module Control.Monad, @@ -42,7 +43,7 @@ import Control.Monad.Trans import Control.Monad.Trans.Writer.Lazy ( Writer, runWriter, execWriter, mapWriter, - WriterT(..), execWriterT, mapWriterT) + WriterT(WriterT), runWriterT, execWriterT, mapWriterT) import Control.Monad import Control.Monad.Fix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mtl-2.1.3.1/mtl.cabal new/mtl-2.2.1/mtl.cabal --- old/mtl-2.1.3.1/mtl.cabal 2014-03-24 19:50:13.000000000 +0100 +++ new/mtl-2.2.1/mtl.cabal 2014-06-02 04:22:37.000000000 +0200 @@ -1,5 +1,5 @@ name: mtl -version: 2.1.3.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 @@ -45,9 +46,9 @@ Control.Monad.Writer.Class Control.Monad.Writer.Lazy Control.Monad.Writer.Strict - build-depends: base < 6, transformers == 0.3.* + build-depends: base < 6, transformers == 0.4.* extensions: MultiParamTypeClasses FunctionalDependencies FlexibleInstances - ghc-options: -Wall -fno-warn-unused-imports + ghc-options: -Wall -fno-warn-unused-imports -fno-warn-warnings-deprecations
