monad-journal 0.2.1.2 → 0.2.2.0
raw patch · 3 files changed
+60/−15 lines, 3 filesdep +monad-controldep +transformers-basedep ~basedep ~eitherdep ~mtlPVP ok
version bump matches the API change (PVP)
Dependencies added: monad-control, transformers-base
Dependency ranges changed: base, either, mtl, transformers
API changes (from Hackage documentation)
+ Control.Monad.Trans.Journal: instance (Functor m, MonadPlus m) => Alternative (JournalT w m)
+ Control.Monad.Trans.Journal: instance (Monoid w, MonadBaseControl b m) => MonadBaseControl b (JournalT w m)
+ Control.Monad.Trans.Journal: instance MonadBase b m => MonadBase b (JournalT w m)
+ Control.Monad.Trans.Journal: instance MonadPlus m => MonadPlus (JournalT w m)
+ Control.Monad.Trans.Journal: instance MonadReader r m => MonadReader r (JournalT w m)
+ Control.Monad.Trans.Journal: instance MonadState s m => MonadState s (JournalT w m)
+ Control.Monad.Trans.Journal: instance MonadWriter w' m => MonadWriter w' (JournalT w m)
+ Control.Monad.Trans.Journal: instance Monoid w => MonadTransControl (JournalT w)
Files
- Control/Monad/Journal.hs +2/−2
- Control/Monad/Trans/Journal.hs +50/−7
- monad-journal.cabal +8/−6
Control/Monad/Journal.hs view
@@ -10,7 +10,7 @@ -} module Control.Monad.Journal (- module X+ module Control.Monad.Journal.Class ) where -import Control.Monad.Journal.Class as X+import Control.Monad.Journal.Class
Control/Monad/Trans/Journal.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE GeneralizedNewtypeDeriving, TypeFamilies, UndecidableInstances #-} {- | Module : Control.Monad.Trans.Journal@@ -16,21 +16,64 @@ -- * JournalT monad transformer JournalT , runJournalT- , module X+ , module Control.Monad.Journal.Class ) where -import Control.Applicative ( Applicative )-import Control.Monad.Journal.Class as X-import Control.Monad.Trans ( MonadTrans, MonadIO )-import Control.Monad.Trans.State ( StateT, get, modify, put, runStateT )+import Control.Applicative ( Applicative, Alternative )+import Control.Monad ( MonadPlus, liftM )+import Control.Monad.Base ( MonadBase, liftBase, liftBaseDefault )+import Control.Monad.Journal.Class+import Control.Monad.Reader.Class ( MonadReader(..) )+import Control.Monad.State.Class ( MonadState )+import qualified Control.Monad.State.Class as MS ( MonadState(..) )+import Control.Monad.Trans ( MonadTrans, MonadIO, lift )+import Control.Monad.Trans.State --( StateT, get, modify, put, runStateT, mapStateT )+import Control.Monad.Trans.Control ( MonadTransControl(..), MonadBaseControl(..), ComposeSt, defaultLiftBaseWith, defaultRestoreM )+import Control.Monad.Writer.Class ( MonadWriter(..) ) import Data.Monoid ( Monoid(..) ) -newtype JournalT w m a = JournalT (StateT w m a) deriving (Applicative,Functor,Monad,MonadTrans,MonadIO)+newtype JournalT w m a = JournalT (StateT w m a)+ deriving ( Applicative+ , Alternative+ , Functor+ , Monad+ , MonadTrans+ , MonadIO+ , MonadPlus+ , MonadReader r+ , MonadWriter w'+ ) instance (Monoid w, Monad m) => MonadJournal w (JournalT w m) where journal !w = JournalT . modify $ flip mappend w history = JournalT get clear = JournalT (put mempty)++instance MonadState s m => MonadState s (JournalT w m) where+ get = lift MS.get+ put = lift . MS.put+ state = lift . MS.state+++instance Monoid w => MonadTransControl (JournalT w) where+ newtype StT (JournalT w) a = StJournal {unStJournal :: (a, w)}+ liftWith f = JournalT $ StateT $ \w ->+ liftM (\x -> (x, w))+ (f $ \t -> liftM StJournal $ runJournalT (journal w >> t))+ restoreT = JournalT . StateT . const . liftM unStJournal+ {-# INLINE liftWith #-}+ {-# INLINE restoreT #-}++instance MonadBase b m => MonadBase b (JournalT w m) where+ liftBase = liftBaseDefault++instance (Monoid w, MonadBaseControl b m) => MonadBaseControl b (JournalT w m) where+ newtype StM (JournalT w m) a =+ StMJournal { unStMJournal :: ComposeSt (JournalT w) m a }+ liftBaseWith = defaultLiftBaseWith StMJournal+ restoreM = defaultRestoreM unStMJournal+ {-# INLINE liftBaseWith #-}+ {-# INLINE restoreM #-} runJournalT :: (Monoid w, Monad m) => JournalT w m a -> m (a,w) runJournalT (JournalT s) = runStateT s mempty
monad-journal.cabal view
@@ -1,7 +1,7 @@ name: monad-journal license: PublicDomain-version: 0.2.1.2-synopsis: Pure logger typeclass and monad transformer +version: 0.2.2.0+synopsis: Pure logger typeclass and monad transformer description: This package provides a typeclass for logging in pure code, or more generally, in any kind of context. You can do whatever you want with@@ -25,8 +25,10 @@ exposed-modules: Control.Monad.Journal , Control.Monad.Journal.Class , Control.Monad.Trans.Journal- build-depends: base >= 4.5 && < 4.7- , mtl == 2.1.*- , transformers == 0.3.*- , either == 4.1.*+ build-depends: base >= 4.5 && < 4.8+ , mtl >= 2.1 && < 2.3+ , transformers >= 0.3 && < 0.5+ , either >= 4.1 && < 4.4+ , monad-control >= 0.3 && < 0.4+ , transformers-base >= 0.4 && < 0.5 default-language: Haskell2010