packages feed

postgresql-tx-monad-logger-0.2.0.0: src/Database/PostgreSQL/Tx/MonadLogger.hs

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

-- | A logging function compatible with @monad-logger@.
--
-- @since 0.1.0.0
type Logger = Loc -> LogSource -> LogLevel -> LogStr -> IO ()

-- | Orphan instance for running @monad-logger@ functions in 'TxM'.
--
-- @since 0.2.0.0
instance (TxEnv Logger r) => MonadLogger (TxM r) where
  monadLoggerLog loc src lvl msg = do
    logger <- askTxEnv
    unsafeRunIOInTxM $ logger loc src lvl (toLogStr msg)