Module for enabling trace > module Barrie.Trace (enableTrace, traceMessage) where > import Data.IORef > import System.IO.Unsafe > traceFile :: IORef (Maybe String) > traceFile = unsafePerformIO $ newIORef Nothing > enableTrace :: String -> IO () > enableTrace fileName = do > writeIORef traceFile (Just fileName) > traceMessage :: String -> IO () > traceMessage msg = do > fileName <- readIORef traceFile > case fileName of > Nothing -> return () > Just name -> appendFile name (msg ++ "\n")