The module BlockIO provides a generic driver for
Haskell applications that want to do I/O quickly.
The driver does all the tedious things involved in
block-oriented I/O (like buffer management), and
uses a "callback function" to process the data it
has read. The idea is that all you have to write
is a Handler, which does no I/O at all but just
processes the data as it comes in.