paragon-0.1.6: src/Language/Java/Paragon/Verbosity.hs
module Language.Java.Paragon.Verbosity
(setVerbosity, getVerbosity, verbosePrint,
normalPrint, extraPrint, detailPrint, finePrint
) where
import Data.IORef
import Control.Monad
import System.IO.Unsafe (unsafePerformIO) -- Trust me, I know what I'm doing...
{-# NOINLINE unsafeVerbosityGlobalVar #-}
unsafeVerbosityGlobalVar :: IORef Int
unsafeVerbosityGlobalVar = unsafePerformIO $ newIORef 1
getVerbosity :: IO Int
getVerbosity = readIORef unsafeVerbosityGlobalVar
setVerbosity :: Int -> IO ()
setVerbosity k = writeIORef unsafeVerbosityGlobalVar k
verbosePrint :: Int -> String -> IO ()
verbosePrint n str = do
k <- getVerbosity
when (n <= k) $ putStrLn str
normalPrint, extraPrint, detailPrint, finePrint :: String -> IO ()
normalPrint = verbosePrint 1
extraPrint = verbosePrint 2
detailPrint = verbosePrint 3
finePrint = verbosePrint 4