-
-
Save RyanGlScott/76b226da323b5b052fb6b5114ed78131 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE DefaultSignatures #-} | |
{-# LANGUAGE GADTs #-} | |
module M where | |
import Control.Monad.IO.Class | |
import Control.Monad.Trans.Reader | |
import qualified Control.Monad.Trans.Class as Trans | |
class (MonadIO m) => MonadLoggerIO m where | |
-- | Request the logging function itself. | |
-- | |
-- Since 0.3.10 | |
askLoggerIO :: m (IO ()) | |
default askLoggerIO :: (Trans.MonadTrans t, MonadLoggerIO n, m ~ t n) | |
=> t n (IO ()) | |
askLoggerIO = Trans.lift askLoggerIO | |
instance MonadLoggerIO m => MonadLoggerIO (ReaderT r m) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE DefaultSignatures, GADTs #-} | |
module MonadLogger where | |
import Control.Monad.IO.Class | |
import qualified Control.Monad.Trans.Class as Trans | |
import Control.Monad.Trans.Identity | |
data Loc | |
data LogSource | |
data LogLevel | |
data LogStr | |
class ToLogStr msg | |
class Monad m => MonadLogger m where | |
monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> m () | |
default monadLoggerLog :: (Trans.MonadTrans t, MonadLogger (t m), ToLogStr msg) | |
=> Loc -> LogSource -> LogLevel -> msg -> t m () | |
monadLoggerLog loc src lvl msg = Trans.lift $ monadLoggerLog loc src lvl msg | |
class (MonadLogger m, MonadIO m) => MonadLoggerIO m where | |
askLoggerIO :: m (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) | |
-- default askLoggerIO :: (Trans.MonadTrans t, MonadLogger (t m), MonadIO (t m)) | |
default askLoggerIO :: (Trans.MonadTrans t, MonadLoggerIO n, t n ~ m) | |
=> t n (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) | |
askLoggerIO = Trans.lift askLoggerIO | |
instance MonadLogger m => MonadLogger (IdentityT m) where | |
monadLoggerLog a b c d = Trans.lift $ monadLoggerLog a b c d | |
instance MonadLoggerIO m => MonadLoggerIO (IdentityT m) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment