
Hello again folks, Sorry to keep troubling you - I'm very appreciative of the help you've given so far. I've got one more for you that has got me totally stumped. I'm writing a program which deals with largish-files, the one I am using as a test case is not stupidly large at about 200mb. After three evenings, I have finally gotten rid of all the stack overflows, but I am unfortunately left with something that is rather unfeasably slow. I was hoping someone with some keener skills than I could take a look, I've tried to distill it to the simplest case. This program just reads in a file, interpreting each value as a double, and does a sort of running average on them. The actual function doesn't matter too much, I think it is the reading it in that is the problem. Here's the code: import Control.Exception import qualified Data.ByteString.Lazy as BL import Data.Binary.Get import System.IO import Data.Binary.IEEE754 myGetter acc = do e <- isEmpty if e == True then return acc else do t <- getFloat64le myGetter $! ((t+acc)/2) myReader file = do h <- openBinaryFile file ReadMode bs <- BL.hGetContents h return $ runGet (myGetter 0) bs main = do d <- myReader "data.bin" evaluate d This takes about three minutes to run on my (fairly modern) laptop.. The equivilant C program takes about 5 seconds. I'm sure I am doing something daft, but I can't for the life of me see what. Any hints about how to get the profiler to show me useful stuff would be much appreciated! All the best, Philip PS: If, instead of computing a single value I try and build a list of the values, the program ends up using over 2gb of memory to read a 200mb file.. any ideas on that one?