    module System.Logging.Facade.Types where

    data LogLevel = TRACE | DEBUG | INFO | WARN | ERROR
      deriving (LogLevel -> LogLevel -> Bool
    (LogLevel -> LogLevel -> Bool)
    -> (LogLevel -> LogLevel -> Bool) -> Eq LogLevel
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: LogLevel -> LogLevel -> Bool
    == :: LogLevel -> LogLevel -> Bool
    $c/= :: LogLevel -> LogLevel -> Bool
    /= :: LogLevel -> LogLevel -> Bool
    Eq, Int -> LogLevel -> ShowS
    [LogLevel] -> ShowS
    LogLevel -> String
    (Int -> LogLevel -> ShowS)
    -> (LogLevel -> String) -> ([LogLevel] -> ShowS) -> Show LogLevel
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> LogLevel -> ShowS
    showsPrec :: Int -> LogLevel -> ShowS
    $cshow :: LogLevel -> String
    show :: LogLevel -> String
    $cshowList :: [LogLevel] -> ShowS
    showList :: [LogLevel] -> ShowS
    Show, ReadPrec [LogLevel]
    ReadPrec LogLevel
    Int -> ReadS LogLevel
    ReadS [LogLevel]
    (Int -> ReadS LogLevel)
    -> ReadS [LogLevel]
    -> ReadPrec LogLevel
    -> ReadPrec [LogLevel]
    -> Read LogLevel
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS LogLevel
    readsPrec :: Int -> ReadS LogLevel
    $creadList :: ReadS [LogLevel]
    readList :: ReadS [LogLevel]
    $creadPrec :: ReadPrec LogLevel
    readPrec :: ReadPrec LogLevel
    $creadListPrec :: ReadPrec [LogLevel]
    readListPrec :: ReadPrec [LogLevel]
    Read, Eq LogLevel
    Eq LogLevel =>
    (LogLevel -> LogLevel -> Ordering)
    -> (LogLevel -> LogLevel -> Bool)
    -> (LogLevel -> LogLevel -> Bool)
    -> (LogLevel -> LogLevel -> Bool)
    -> (LogLevel -> LogLevel -> Bool)
    -> (LogLevel -> LogLevel -> LogLevel)
    -> (LogLevel -> LogLevel -> LogLevel)
    -> Ord LogLevel
    LogLevel -> LogLevel -> Bool
    LogLevel -> LogLevel -> Ordering
    LogLevel -> LogLevel -> LogLevel
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: LogLevel -> LogLevel -> Ordering
    compare :: LogLevel -> LogLevel -> Ordering
    $c< :: LogLevel -> LogLevel -> Bool
    < :: LogLevel -> LogLevel -> Bool
    $c<= :: LogLevel -> LogLevel -> Bool
    <= :: LogLevel -> LogLevel -> Bool
    $c> :: LogLevel -> LogLevel -> Bool
    > :: LogLevel -> LogLevel -> Bool
    $c>= :: LogLevel -> LogLevel -> Bool
    >= :: LogLevel -> LogLevel -> Bool
    $cmax :: LogLevel -> LogLevel -> LogLevel
    max :: LogLevel -> LogLevel -> LogLevel
    $cmin :: LogLevel -> LogLevel -> LogLevel
    min :: LogLevel -> LogLevel -> LogLevel
    Ord, LogLevel
    LogLevel -> LogLevel -> Bounded LogLevel
    forall a. a -> a -> Bounded a
    $cminBound :: LogLevel
    minBound :: LogLevel
    $cmaxBound :: LogLevel
    maxBound :: LogLevel
    Bounded, Int -> LogLevel
    LogLevel -> Int
    LogLevel -> [LogLevel]
    LogLevel -> LogLevel
    LogLevel -> LogLevel -> [LogLevel]
    LogLevel -> LogLevel -> LogLevel -> [LogLevel]
    (LogLevel -> LogLevel)
    -> (LogLevel -> LogLevel)
    -> (Int -> LogLevel)
    -> (LogLevel -> Int)
    -> (LogLevel -> [LogLevel])
    -> (LogLevel -> LogLevel -> [LogLevel])
    -> (LogLevel -> LogLevel -> [LogLevel])
    -> (LogLevel -> LogLevel -> LogLevel -> [LogLevel])
    -> Enum LogLevel
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    $csucc :: LogLevel -> LogLevel
    succ :: LogLevel -> LogLevel
    $cpred :: LogLevel -> LogLevel
    pred :: LogLevel -> LogLevel
    $ctoEnum :: Int -> LogLevel
    toEnum :: Int -> LogLevel
    $cfromEnum :: LogLevel -> Int
    fromEnum :: LogLevel -> Int
    $cenumFrom :: LogLevel -> [LogLevel]
    enumFrom :: LogLevel -> [LogLevel]
    $cenumFromThen :: LogLevel -> LogLevel -> [LogLevel]
    enumFromThen :: LogLevel -> LogLevel -> [LogLevel]
    $cenumFromTo :: LogLevel -> LogLevel -> [LogLevel]
    enumFromTo :: LogLevel -> LogLevel -> [LogLevel]
    $cenumFromThenTo :: LogLevel -> LogLevel -> LogLevel -> [LogLevel]
    enumFromThenTo :: LogLevel -> LogLevel -> LogLevel -> [LogLevel]
    Enum)

    data Location = Location {
      Location -> String
    locationPackage :: String
    , Location -> String
    locationModule :: String
    , Location -> String
    locationFile :: String
    , Location -> Int
    locationLine :: Int
    , Location -> Int
    locationColumn :: Int
    } deriving (Location -> Location -> Bool
    (Location -> Location -> Bool)
    -> (Location -> Location -> Bool) -> Eq Location
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Location -> Location -> Bool
    == :: Location -> Location -> Bool
    $c/= :: Location -> Location -> Bool
    /= :: Location -> Location -> Bool
    Eq, Int -> Location -> ShowS
    [Location] -> ShowS
    Location -> String
    (Int -> Location -> ShowS)
    -> (Location -> String) -> ([Location] -> ShowS) -> Show Location
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Location -> ShowS
    showsPrec :: Int -> Location -> ShowS
    $cshow :: Location -> String
    show :: Location -> String
    $cshowList :: [Location] -> ShowS
    showList :: [Location] -> ShowS
    Show)

    data LogRecord = LogRecord {
      LogRecord -> LogLevel
    logRecordLevel :: LogLevel
    , LogRecord -> Maybe Location
    logRecordLocation :: Maybe Location
    , LogRecord -> String
    logRecordMessage :: String
    } deriving (LogRecord -> LogRecord -> Bool
    (LogRecord -> LogRecord -> Bool)
    -> (LogRecord -> LogRecord -> Bool) -> Eq LogRecord
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: LogRecord -> LogRecord -> Bool
    == :: LogRecord -> LogRecord -> Bool
    $c/= :: LogRecord -> LogRecord -> Bool
    /= :: LogRecord -> LogRecord -> Bool
    Eq, Int -> LogRecord -> ShowS
    [LogRecord] -> ShowS
    LogRecord -> String
    (Int -> LogRecord -> ShowS)
    -> (LogRecord -> String)
    -> ([LogRecord] -> ShowS)
    -> Show LogRecord
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> LogRecord -> ShowS
    showsPrec :: Int -> LogRecord -> ShowS
    $cshow :: LogRecord -> String
    show :: LogRecord -> String
    $cshowList :: [LogRecord] -> ShowS
    showList :: [LogRecord] -> ShowS
    Show)