{-# LANGUAGE UndecidableInstances #-} -- | silent logging (output nothing) module Control.Carrier.Logging.Silent (SilentLoggingC (..)) where import Control.Algebra (Algebra (alg), (:+:) (L, R)) import Control.Effect.Logging (Logging (LoggerLog)) import Control.Monad.Identity (IdentityT (IdentityT)) import UnliftIO (MonadIO, MonadUnliftIO) -- | a sileng logging carrier, that doesn't print any logs newtype SilentLoggingC m a = MkSilentLoggingC {runSilentLogging :: m a} deriving (Functor, Applicative, Monad, MonadIO, MonadFail, MonadUnliftIO) via IdentityT m instance Algebra sig m => Algebra (Logging :+: sig) (SilentLoggingC m) where alg hdl sig ctx = case sig of L (LoggerLog _msg) -> MkSilentLoggingC (ctx <$ pure ()) R other -> MkSilentLoggingC do alg (runSilentLogging . hdl) other ctx