Hi Svein, > Hold on, he's using hGetBuf/hPutBuf.
exactly, that's what I was thinking. When a program requests that 'n' bytes ought to be read into memory at the location designated by the given 'Ptr Word8', how could GHC possibly do any encoding or decoding? That API doesn't allow for multi-byte characters. I would assume that hGetBuf/hPutBuf are the equivalent to POSIX read() and write()? > I wonder if the difference goes away if the handle is explicitly set > to binary? I added an mapM_ (\h -> hSetBinaryMode h True) [ stdin, stdout ] to 'main', and it does seem to improve performance a little, but it's still quite a bit slower than /bin/cat: | $ time /bin/cat <test.data >/dev/null | | real 0m2.119s | user 0m0.003s | sys 0m1.967s | | $ time ./cat-hgetbuf <test.data >/dev/null | | real 0m3.449s | user 0m1.137s | sys 0m2.240s Take care, Peter _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe