module CabalGild.Class.MonadLog where

-- | A 'Monad' that can also log messages.
class (Monad m) => MonadLog m where
  -- | Logs the given message. Typical usage should prefer 'logLn'.
  log :: String -> m ()

-- | Uses 'putStr'.
instance MonadLog IO where
  log :: String -> IO ()
log = String -> IO ()
putStr

-- | Logs the message followed by a newline.
logLn :: (MonadLog m) => String -> m ()
logLn :: forall (m :: * -> *). MonadLog m => String -> m ()
logLn = String -> m ()
forall (m :: * -> *). MonadLog m => String -> m ()
CabalGild.Class.MonadLog.log (String -> m ()) -> (String -> String) -> String -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"\n")