packages feed

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 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