Logging in Haskell
A final thing we'll consider is more related to I/O than streaming: logging in Haskell applications. Logging is important in any sufficiently important application.
In a small scale, a list- or DList-based WriterT
monad is often all that is needed: it's simple and potentially pure (if the underlying monad is pure). However, on a bigger scale it doesn't make sense to store messages in an internal pure data structure. Instead, it's most efficient to write them to disk (or over a network) immediately (likely still using a buffer, though).
Furthermore, it would be nice if the logging functionality could be decoupled from other application code, even reused between different applications.
A popular solution which provides just that kind of decoupling is the monad-logger
library. It uses a library called Fastlogger
, which provides logging that scales in multicore environments. Most notoriously, FastLogger
is used in the Web Application Interface (WAI) package used by many high...