packages feed

pfile-0.1.0.0: src/PFile/Log.hs

{- |
Module:      PFile.Log
Copyright:   (c) 2024 Illia Shkroba
License:     BSD3
Maintainer:  Illia Shkroba <is@pjwstk.edu.pl>
Stability:   unstable
Portability: non-portable (Non-Unix systems are not supported)

Types and functions for logging.
-}

{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE NamedFieldPuns    #-}
{-# LANGUAGE OverloadedStrings #-}

module PFile.Log
  ( info
  , warning
  , error
  , panic
  ) where

import           PFile.Env (Env (..))
import           Protolude hiding (panic, print)

info :: (MonadReader Env m, MonadIO m) => Text -> m ()
info message = do
  Env {print} <- ask
  liftIO $ print $ "[INFO] " <> message

warning :: (MonadReader Env m, MonadIO m) => Text -> m ()
warning message = do
  Env {print} <- ask
  liftIO $ print $ "[WARNING] " <> message

error :: MonadIO m => Text -> m ()
error = putErrLn

panic :: MonadIO m => Text -> m a
panic message = error message >> liftIO exitFailure