paragon-0.1.28: src/Language/Java/Paragon/Interaction.hs
module Language.Java.Paragon.Interaction
(setVerbosity, getVerbosity, verbosePrint,
normalPrint, detailPrint, finePrint, debugPrint,
panic,
versionString, libraryBase, typeCheckerBase
) where
import Data.IORef
import Control.Monad
import System.IO.Unsafe (unsafePerformIO) -- Trust me, I know what I'm doing... :-D
import Language.Java.Paragon.Monad.Base
-------------------------------------------------------------
-- Verbosity in feedback
{-# NOINLINE unsafeVerbosityGlobalVar #-}
unsafeVerbosityGlobalVar :: IORef Int
unsafeVerbosityGlobalVar = unsafePerformIO $ newIORef 1
getVerbosity :: IO Int
getVerbosity = readIORef unsafeVerbosityGlobalVar
setVerbosity :: Int -> IO ()
setVerbosity k = writeIORef unsafeVerbosityGlobalVar k
verbosePrint :: MonadIO m => Int -> String -> m ()
verbosePrint n str = liftIO $ do
k <- getVerbosity
when (n <= k) $ putStrLn str
normalPrint, detailPrint, finePrint, debugPrint :: MonadIO m => String -> m ()
normalPrint = verbosePrint 1 -- Feedback to the user in the normal case
detailPrint = verbosePrint 2 -- Report individual members
finePrint = verbosePrint 3 -- Report verbosely (default for -v)
debugPrint = verbosePrint 4 -- Include DEBUG output
-------------------------------------------------------------
panic :: String -> String -> a
panic cause extra = error $ "Panic! " ++ cause ++ " caused the impossible, \
\and the world is now about to end in 3.. 2.. 1.. \n\
\Please report as a bug at: " ++ issueTracker ++
if not (null extra)
then "\nExtra information: " ++ extra
else ""
issueTracker :: String
issueTracker = "http://code.google.com/p/paragon-java/issues/entry"
versionString :: String
versionString = "0.1.28"
libraryBase, typeCheckerBase :: String
libraryBase = "Language.Java.Paragon"
typeCheckerBase = libraryBase ++ ".TypeCheck"