{-# LANGUAGE FlexibleContexts #-} module Package.C.Logging ( putNormal , putDiagnostic , putLoud ) where import Control.Monad (when) import Control.Monad.Reader import Package.C.Type.Verbosity putVerbosity :: (MonadReader Verbosity m, MonadIO m) => Verbosity -> String -> m () putVerbosity :: forall (m :: * -> *). (MonadReader Verbosity m, MonadIO m) => Verbosity -> String -> m () putVerbosity Verbosity verb String s = do Verbosity v <- m Verbosity forall r (m :: * -> *). MonadReader r m => m r ask Bool -> m () -> m () forall (f :: * -> *). Applicative f => Bool -> f () -> f () when (Verbosity v Verbosity -> Verbosity -> Bool forall a. Ord a => a -> a -> Bool >= Verbosity verb) (IO () -> m () forall a. IO a -> m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (String -> IO () putStrLn String s)) putNormal :: (MonadReader Verbosity m, MonadIO m) => String -> m () putNormal :: forall (m :: * -> *). (MonadReader Verbosity m, MonadIO m) => String -> m () putNormal = Verbosity -> String -> m () forall (m :: * -> *). (MonadReader Verbosity m, MonadIO m) => Verbosity -> String -> m () putVerbosity Verbosity Normal putDiagnostic :: (MonadReader Verbosity m, MonadIO m) => String -> m () putDiagnostic :: forall (m :: * -> *). (MonadReader Verbosity m, MonadIO m) => String -> m () putDiagnostic = Verbosity -> String -> m () forall (m :: * -> *). (MonadReader Verbosity m, MonadIO m) => Verbosity -> String -> m () putVerbosity Verbosity Diagnostic putLoud :: (MonadReader Verbosity m, MonadIO m) => String -> m () putLoud :: forall (m :: * -> *). (MonadReader Verbosity m, MonadIO m) => String -> m () putLoud = Verbosity -> String -> m () forall (m :: * -> *). (MonadReader Verbosity m, MonadIO m) => Verbosity -> String -> m () putVerbosity Verbosity Loud