{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Main where
import Arbor.Monad.Logger
import Control.Monad.Reader
import qualified AppEnv as E
newtype Service a = Service
{ unService :: ReaderT E.AppEnv (LoggingT IO) a
}
deriving ( Functor
, Applicative
, Monad
, MonadIO
, MonadLogger
, MonadReader E.AppEnv)
runServiceTimedFastLogger :: e -> LogLevel -> ReaderT e (LoggingT IO) a -> IO a
runServiceTimedFastLogger e lvl f = withStdOutTimedFastLogger $ \lgr -> runTimedLogT lvl lgr (runReaderT f e)
main :: IO ()
main = withStdOutTimedFastLogger $ \lgr -> do
let appEnv = E.AppEnv (E.Logger lgr LevelInfo)
runServiceTimedFastLogger appEnv LevelInfo . unService $ do
logInfo "Hello world"
return ()
pushLogMessage lgr LevelError ("Exiting" :: String)