{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Database.PostgreSQL.Tx.MonadLogger where
import Control.Monad.Logger (MonadLogger(monadLoggerLog), Loc, LogLevel, LogSource, LogStr, toLogStr)
import Database.PostgreSQL.Tx (TxEnv, TxM, askTxEnv)
import Database.PostgreSQL.Tx.Unsafe (unsafeRunIOInTxM)
type Logger = Loc -> LogSource -> LogLevel -> LogStr -> IO ()
instance (TxEnv Logger r) => MonadLogger (TxM r) where
monadLoggerLog :: Loc -> LogSource -> LogLevel -> msg -> TxM r ()
monadLoggerLog Loc
loc LogSource
src LogLevel
lvl msg
msg = do
Logger
logger <- TxM r Logger
forall a r. TxEnv a r => TxM r a
askTxEnv
IO () -> TxM r ()
forall a r. IO a -> TxM r a
unsafeRunIOInTxM (IO () -> TxM r ()) -> IO () -> TxM r ()
forall a b. (a -> b) -> a -> b
$ Logger
logger Loc
loc LogSource
src LogLevel
lvl (msg -> LogStr
forall msg. ToLogStr msg => msg -> LogStr
toLogStr msg
msg)