cryptol-2.6.0: src/Cryptol/Utils/Logger.hs
-- | A simple system so that the Cryptol driver can communicate
-- with users (or not).
module Cryptol.Utils.Logger
( Logger
, stdoutLogger
, stderrLogger
, handleLogger
, quietLogger
, funLogger
, logPutStr
, logPutStrLn
, logPrint
) where
import System.IO(Handle, hPutStr, stdout, stderr)
import Control.DeepSeq(NFData(..))
-- | A logger provides simple abstraction for sending messages.
newtype Logger = Logger (String -> IO ())
instance NFData Logger where
rnf (Logger x) = rnf x
-- | Send the given string to the log.
logPutStr :: Logger -> String -> IO ()
logPutStr (Logger f) = f
-- | Send the given string with a newline at the end.
logPutStrLn :: Logger -> String -> IO ()
logPutStrLn l s = logPutStr l (s ++ "\n")
-- | Send the given value using its 'Show' instance.
-- Adds a newline at the end.
logPrint :: Show a => Logger -> a -> IO ()
logPrint l a = logPutStrLn l (show a)
-- | A logger that ignores all messages.
quietLogger :: Logger
quietLogger = Logger (const (return ()))
-- | Log to the given handle.
handleLogger :: Handle -> Logger
handleLogger h = Logger (hPutStr h)
-- | Log to stdout.
stdoutLogger :: Logger
stdoutLogger = handleLogger stdout
-- | Log to stderr.
stderrLogger :: Logger
stderrLogger = handleLogger stderr
-- | Just use this function for logging.
funLogger :: (String -> IO ()) -> Logger
funLogger = Logger