|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.
You may also wish to check out Library/Streams for a new approach to I/O.