(hGetBuf, and mmapped IO are options)
(Updated with iteratees)
|(4 intermediate revisions by 4 users not shown)|
Latest revision as of 02:13, 12 July 2012
|Haskell Performance Resource|
Before continuing, I strongly recommend reading Performance/Strings first. Fast I/O and string handling overlap in many places, so this page will only discuss the parts that are not specific to strings.
 1 Iteratee I/O
Iteratees are a relatively new approach to streaming I/O. If your code uses I/O extensively (for example, in a web server), iteratees are the best way to do it.
Using the Conduit library, a program to read a file and pipe it to stdout can be written as follows:
main = runResourceT (sourceFile "test.txt" $$ sinkHandle stdout)
 2 Other solutions
If this is too high-level for you,
buffer-based IO is an alternative (
hPutBuf). This can be
particularly effective when combined with packed strings (see wc).
Some external libraries also provide memory mapped IO.
In 2006, someone came up with a solution called Streams. However, it does not seem to be maintained anymore.