Silently is a package that allows you to run an IO action and
prevent it from writing to stdout, or any other handle, by using
silence. Or you can capture the output for yourself using capture.
For example, the program
import System.IO.Silently
main = do
putStr "putStrLn: " >> putStrLn "puppies!"
putStr "silenced: " >> silence (putStrLn "kittens!")
putStrLn ""
(captured, result) <- capture (putStr "wookies!" >> return 123)
putStr "captured: " >> putStrLn captured
putStr "returned: " >> putStrLn (show result)will print:
putStrLn: puppies!
silenced:
captured: wookies!
returned: 123
Since all threads of a process share the standard output handles stdout and stderr,
capturing output to these handle will capture the output of all threads,
not just the one running the action under capture.
In essence, this library does not work in a situation where multiple threads are writing to the handle whose output produced by the given action we want to capture.
See:
Capturing/silencing might not work as expected if the action uses the FFI
or conceals output under unsafePerformIO or similar unsafe operations.
Examples:
- FFI: #3
unsafePerformIO: bos/filemanip#22