packages feed

arbor-monad-logger-0.1.0.0: app/Main.hs

{-# 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)