{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Imm.Logger where
import Imm.Prelude
import Imm.Pretty
data LogLevel = Debug | Info | Warning | Error
deriving(Eq, Ord, Read, Show)
instance Pretty LogLevel where
pretty Debug = "DEBUG"
pretty Info = "INFO"
pretty Warning = "WARNING"
pretty Error = "ERROR"
class Monad m => MonadLog m where
log :: LogLevel -> Doc AnsiStyle -> m ()
getLogLevel :: m LogLevel
setLogLevel :: LogLevel -> m ()
setColorizeLogs :: Bool -> m ()
flushLogs :: m ()
logDebug, logInfo, logWarning, logError :: MonadLog m => Doc AnsiStyle -> m ()
logDebug = log Debug
logInfo = log Info
logWarning = log Warning
logError = log Error