packages feed

cabal-hoogle-3.10.0.0: src/Hoogle/Cabal/Logger.hs

module Hoogle.Cabal.Logger
  ( Logger,
    cmapLogger,
    stdoutLogger,
    logWith,
    module Colog.Core,
  )
where

import Colog.Core
import Data.Time (getCurrentTime)
import Control.Monad.IO.Class

type Logger msg = LogAction IO (WithSeverity msg)

cmapLogger :: (a -> b) -> Logger b -> Logger a
cmapLogger f = cmap (fmap f)

stdoutLogger :: Show msg => Logger msg
stdoutLogger = LogAction $ \msg -> do
  -- cmap showMsg logStringStdout
  now <- getCurrentTime
  putStrLn $ showMsg now msg
  where
    showMsg time (WithSeverity msg severity) =
      "["
        ++ show severity
        ++ "]["
        ++ show time
        ++ "] "
        ++ show msg

logWith :: MonadIO m => Logger msg -> Severity -> msg -> m ()
logWith logger severity msg = liftIO $ unLogAction logger (WithSeverity msg severity)