packages feed

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