|Haskell Performance Resource|
If the standard lazy IO operations are proving to be a bottleneck, buffer-based IO is an alternative (hGetBuf/hPutBuf). This can be particularly effective when combined with packed strings (see wc).
Some external libraries also provide memory mapped IO.
Library/Streams is a new (in 2006) approach to I/O, which claims to be 5-10 times faster on some operations than handle-based IO.