{-| Module : Game.GoreAndAsh.Logging Description : Module that contains all logging API for Gore&Ash Copyright : (c) Anton Gushcha, 2015-2016 License : BSD3 Maintainer : ncrashed@gmail.com Stability : experimental Portability : POSIX The module contains all API for Gore&Ash logging module. The module doesn't depends on others core modules and could be place in any place in game monad stack. The core module is not pure on it first phase and could be used with 'IO' as end monad. See 'ModuleStack' documentation. Example of embedding: @ -- | Application monad is monad stack build from given list of modules over base monad (IO) type AppStack = ModuleStack [LoggingT, ... other modules ... ] IO newtype AppState = AppState (ModuleState AppStack) deriving (Generic) instance NFData AppState -- | Wrapper around type family newtype AppMonad a = AppMonad (AppStack a) deriving (Functor, Applicative, Monad, MonadFix, MonadIO, LoggingMonad, ... other modules monads ... ) instance GameModule AppMonad AppState where type ModuleState AppMonad = AppState runModule (AppMonad m) (AppState s) = do (a, s') <- runModule m s return (a, AppState s') newModuleState = AppState <$> newModuleState withModule _ = withModule (Proxy :: Proxy AppStack) cleanupModule (AppState s) = cleanupModule s -- | Arrow that is build over the monad stack type AppWire a b = GameWire AppMonad a b @ playerActor :: ActorMonad m => (PlayerId -> Player) -> GameActor m PlayerId Game Player playerActor initialPlayer = makeActor $ \i -> stateWire (initialPlayer i) $ mainController i where mainController i = proc (g, p) -> do @ -} module Game.GoreAndAsh.Logging( -- * Low-level API LoggingState , LoggingT , LoggingLevel(..) , LoggingSink(..) , LoggingMonad(..) , loggingSetFile -- * Arrow API , logA , logALn , logE , logELn -- ** Every frame , logDebugA , logInfoA , logWarnA , logErrorA -- ** Event based , logDebugE , logInfoE , logWarnE , logErrorE -- ** Event tracing , traceEvent , traceEventShow ) where import Game.GoreAndAsh.Logging.API import Game.GoreAndAsh.Logging.Module import Game.GoreAndAsh.Logging.State