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