{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} -- | Logger module. module Imm.Logger where -- {{{ Imports import Imm.Prelude import Imm.Pretty -- }}} -- * Types 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" -- | Monad capable of logging pretty text. class Monad m => MonadLog m where log :: LogLevel -> Doc AnsiStyle -> m () getLogLevel :: m LogLevel setLogLevel :: LogLevel -> m () setColorizeLogs :: Bool -> m () flushLogs :: m () -- * Helpers logDebug, logInfo, logWarning, logError :: MonadLog m => Doc AnsiStyle -> m () logDebug = log Debug logInfo = log Info logWarning = log Warning logError = log Error