module System.Logging.Facade.TH (
log
, trace
, debug
, info
, warn
, error
, Logging
, LogLevel(..)
) where
import Prelude hiding (mod, log, error)
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
import System.Logging.Facade.Types
import System.Logging.Facade.Class
log :: ExpQ
log = [|\level -> consumeLogRecord . LogRecord level $(mkLocation)|]
trace :: ExpQ
trace = [|$(log) TRACE|]
debug :: ExpQ
debug = [|$(log) DEBUG|]
info :: ExpQ
info = [|$(log) INFO|]
warn :: ExpQ
warn = [|$(log) WARN|]
error :: ExpQ
error = [|$(log) ERROR|]
instance Lift LogLevel where
lift level = case level of
TRACE -> [|TRACE|]
DEBUG -> [|DEBUG|]
INFO -> [|INFO|]
WARN -> [|WARN|]
ERROR -> [|ERROR|]
mkLocation :: ExpQ
mkLocation = do
loc <- location
let file = loc_filename loc
package = loc_package loc
mod = loc_module loc
(line, column) = loc_start loc
[|Just (Location {locationPackage = package, locationModule = mod, locationFile = file, locationLine = line, locationColumn = column})|]