import qualified System.Console.Concurrent as Concurrent trace :: [Char] -> a -> a trace string expr = unsafePerformIO $ do traceIO string return expr traceIO :: [Char] -> IO () traceIO string = do Concurrent.errorConcurrent (string <> "\n")