packages feed

monad-logger (empty) → 0.2.0

raw patch · 4 files changed

+149/−0 lines, 4 filesdep +basedep +fast-loggerdep +resourcetsetup-changed

Dependencies added: base, fast-logger, resourcet, template-haskell, text, transformers

Files

+ Control/Monad/Logger.hs view
@@ -0,0 +1,105 @@+{-# LANGUAGE TemplateHaskell #-}+module Control.Monad.Logger+    ( -- * MonadLogger+      MonadLogger(..)+    , LogLevel(..)+    -- * TH logging+    , logDebug+    , logInfo+    , logWarn+    , logError+    , logOther+    ) where++import Language.Haskell.TH.Syntax (Lift (lift), Q, Exp, Loc (Loc), qLocation)+import System.Log.FastLogger (ToLogStr)++import Data.Monoid (Monoid)++import Data.Functor.Identity (Identity)+import Control.Monad.ST (ST)+import qualified Control.Monad.ST.Lazy as Lazy (ST)++import Control.Monad.Trans.Identity ( IdentityT)+import Control.Monad.Trans.List     ( ListT    )+import Control.Monad.Trans.Maybe    ( MaybeT   )+import Control.Monad.Trans.Error    ( ErrorT, Error)+import Control.Monad.Trans.Reader   ( ReaderT  )+import Control.Monad.Trans.Cont     ( ContT  )+import Control.Monad.Trans.State    ( StateT   )+import Control.Monad.Trans.Writer   ( WriterT  )+import Control.Monad.Trans.RWS      ( RWST     )+import Control.Monad.Trans.Resource ( ResourceT)++import qualified Control.Monad.Trans.RWS.Strict    as Strict ( RWST   )+import qualified Control.Monad.Trans.State.Strict  as Strict ( StateT )+import qualified Control.Monad.Trans.Writer.Strict as Strict ( WriterT )++import Control.Monad.Trans.Class (MonadTrans)+import qualified Control.Monad.Trans.Class as Trans++import Data.Text (Text, pack, unpack)++data LogLevel = LevelDebug | LevelInfo | LevelWarn | LevelError | LevelOther Text+    deriving (Eq, Prelude.Show, Prelude.Read, Ord)++instance Lift LogLevel where+    lift LevelDebug = [|LevelDebug|]+    lift LevelInfo = [|LevelInfo|]+    lift LevelWarn = [|LevelWarn|]+    lift LevelError = [|LevelError|]+    lift (LevelOther x) = [|LevelOther $ pack $(lift $ unpack x)|]++class Monad m => MonadLogger m where+    monadLoggerLog :: ToLogStr msg => Loc -> LogLevel -> msg -> m ()++instance MonadLogger IO          where monadLoggerLog _ _ _ = return ()+instance MonadLogger Identity    where monadLoggerLog _ _ _ = return ()+instance MonadLogger (ST s)      where monadLoggerLog _ _ _ = return ()+instance MonadLogger (Lazy.ST s) where monadLoggerLog _ _ _ = return ()++liftLog :: (MonadTrans t, MonadLogger m, ToLogStr msg) => Loc -> LogLevel -> msg -> t m ()+liftLog a b c = Trans.lift $ monadLoggerLog a b c++instance MonadLogger m => MonadLogger (IdentityT m) where monadLoggerLog = liftLog+instance MonadLogger m => MonadLogger (ListT m) where monadLoggerLog = liftLog+instance MonadLogger m => MonadLogger (MaybeT m) where monadLoggerLog = liftLog+instance (MonadLogger m, Error e) => MonadLogger (ErrorT e m) where monadLoggerLog = liftLog+instance MonadLogger m => MonadLogger (ReaderT r m) where monadLoggerLog = liftLog+instance MonadLogger m => MonadLogger (ContT r m) where monadLoggerLog = liftLog+instance MonadLogger m => MonadLogger (StateT s m) where monadLoggerLog = liftLog+instance (MonadLogger m, Monoid w) => MonadLogger (WriterT w m) where monadLoggerLog = liftLog+instance (MonadLogger m, Monoid w) => MonadLogger (RWST r w s m) where monadLoggerLog = liftLog+instance MonadLogger m => MonadLogger (ResourceT m) where monadLoggerLog = liftLog+instance MonadLogger m => MonadLogger (Strict.StateT s m) where monadLoggerLog = liftLog+instance (MonadLogger m, Monoid w) => MonadLogger (Strict.WriterT w m) where monadLoggerLog = liftLog+instance (MonadLogger m, Monoid w) => MonadLogger (Strict.RWST r w s m) where monadLoggerLog = liftLog++logTH :: LogLevel -> Q Exp+logTH level =+    [|monadLoggerLog $(qLocation >>= liftLoc) $(lift level) . (id :: Text -> Text)|]+  where+    liftLoc :: Loc -> Q Exp+    liftLoc (Loc a b c d e) = [|Loc $(lift a) $(lift b) $(lift c) $(lift d) $(lift e)|]++-- | Generates a function that takes a 'Text' and logs a 'LevelDebug' message. Usage:+--+-- > $(logDebug) "This is a debug log message"+logDebug :: Q Exp+logDebug = logTH LevelDebug++-- | See 'logDebug'+logInfo :: Q Exp+logInfo = logTH LevelInfo+-- | See 'logDebug'+logWarn :: Q Exp+logWarn = logTH LevelWarn+-- | See 'logDebug'+logError :: Q Exp+logError = logTH LevelError++-- | Generates a function that takes a 'Text' and logs a 'LevelOther' message. Usage:+--+-- > $(logOther "My new level") "This is a log message"+logOther :: Text -> Q Exp+logOther = logTH . LevelOther
+ LICENSE view
@@ -0,0 +1,20 @@+Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/++Permission is hereby granted, free of charge, to any person obtaining+a copy of this software and associated documentation files (the+"Software"), to deal in the Software without restriction, including+without limitation the rights to use, copy, modify, merge, publish,+distribute, sublicense, and/or sell copies of the Software, and to+permit persons to whom the Software is furnished to do so, subject to+the following conditions:++The above copyright notice and this permission notice shall be+included in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ monad-logger.cabal view
@@ -0,0 +1,22 @@+name:                monad-logger+version:             0.2.0+synopsis:            A class of monads which can log messages.+description:         This package uses template-haskell for determining source code locations of messages.+homepage:            https://github.com/kazu-yamamoto/logger+license:             MIT+license-file:        LICENSE+author:              Michael Snoyman+maintainer:          michael@snoyman.com+category:            System+build-type:          Simple+cabal-version:       >=1.8+++library+  exposed-modules:     Control.Monad.Logger+  build-depends:       base               >= 4         && < 5+                     , template-haskell+                     , transformers+                     , text+                     , resourcet          >= 0.3       && < 0.4+                     , fast-logger        >= 0.2       && < 0.3