packages feed

monad-journal (empty) → 0.1.0.0

raw patch · 5 files changed

+124/−0 lines, 5 filesdep +basedep +mtldep +transformerssetup-changed

Dependencies added: base, mtl, transformers

Files

+ Control/Monad/Journal.hs view
@@ -0,0 +1,17 @@+{- |+Module      :  Control.Monad.Journal+Description :  Journal monad class+Copyright   :  (c) Dimitri Sabadie+License     :  GPL-3++Maintainer  :  dimitri.sabadie@gmail.com+Stability   :  stable+Portability :  portable++-}++module Control.Monad.Journal (+    module X+  ) where++import Control.Monad.Journal.Class as X
+ Control/Monad/Journal/Class.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE FunctionalDependencies #-}++{- |+Module      :  Control.Monad.Journal.Class+Description :  `MonadJournal` class+Copyright   :  (c) Dimitri Sabadie+License     :  GPL-3++Maintainer  :  dimitri.sabadie@gmail.com+Stability   :  stable+Portability :  portable++-}++module Control.Monad.Journal.Class (+    -- * MonadJournal+    MonadJournal(..)+  , sink+  , absorb+  ) where++import Control.Monad ( Monad )+import Control.Monad.Trans ( MonadIO, liftIO )+import Data.Monoid ( Monoid, mappend, mempty )++class (Monoid w, Monad m) => MonadJournal w m | m -> w where+  -- |Log something.+  journal :: w -> m ()+  -- |Extract the logs history.+  history :: m w+  -- |Clear the logs history.+  clear :: m ()+  +-- |Sink all logs history through `MonadIO` then clean it.+sink :: (MonadJournal w m, MonadIO m) => (w -> IO ()) -> m ()+sink out = history >>= liftIO . out >> clear++-- |Absorb a logs history and pass around the value.+absorb :: (MonadJournal w m) => (a,w) -> m a+absorb (a,w) = journal w >> return a
+ Control/Monad/Trans/Journal.hs view
@@ -0,0 +1,36 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++{- |+Module      :  Control.Monad.Trans.Journal+Description :  Journal monad transformer+Copyright   :  (c) Dimitri Sabadie+License     :  GPL-3++Maintainer  :  dimitri.sabadie@gmail.com+Stability   :  stable+Portability :  portable++-}++module Control.Monad.Trans.Journal (+    -- * LoggerT monad transformer+    LoggerT+  , runLoggerT+  , module X+  ) 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 Data.Monoid ( Monoid(..) )++newtype LoggerT w m a = LoggerT (StateT w m a) deriving (Applicative,Functor,Monad,MonadTrans,MonadIO)++instance (Monoid w, Monad m) => MonadJournal w (LoggerT w m) where+  journal = LoggerT . modify . flip mappend+  history = LoggerT get+  clear   = LoggerT (put mempty)++runLoggerT :: (Monoid w, Monad m) => LoggerT w m a -> m (a,w)+runLoggerT (LoggerT s) = runStateT s mempty
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ monad-journal.cabal view
@@ -0,0 +1,29 @@+name:                monad-journal+license:             PublicDomain+version:             0.1.0.0+synopsis:            On-the-fly logging typeclass and monad transformer +description:         This package provides a typeclass for logging situations+                     when you want to deal with the logs on-the-fly.+                     It also exports a monad transformer that enables such a+                     kind of logging in any monad.+homepage:            https://github.com/skypers/monad-journal+author:              DimitriSabadie+maintainer:          dimitri.sabadie@gmail.com+category:            Control+build-type:          Simple++cabal-version:       >= 1.10++library+  default-extensions:      FlexibleInstances+                         , MultiParamTypeClasses+  other-extensions:        FunctionalDependencies+                         , GeneralizedNewtypeDeriving+  exposed-modules:         Control.Monad.Journal+                         , Control.Monad.Journal.Class+                         , Control.Monad.Trans.Journal+  build-depends:           base         >= 4.5 && < 4.6+                         , mtl          == 2.1.*+                         , transformers == 0.3.*+  default-language:        Haskell2010+