[Haskell-cafe] Need some advice around lazy IO

Konstantin Litvinenko to.darkangel at gmail.com
Mon Mar 18 11:01:30 CET 2013


On 03/17/2013 07:08 AM, C K Kashyap wrote:
> I am working on an automation that periodically fetches bug data from
> our bug tracking system and creates static HTML reports. Things worked
> fine when the bugs were in the order of 200 or so. Now I am trying to
> run it against 3000 bugs and suddenly I see things like - too  many open
> handles, out of memory etc ...
>
> Here's the code snippet - http://hpaste.org/84197
>
> It's a small snippet and I've put in the comments stating how I run into
> "out of file handles" or simply file not getting read due to lazy IO.
>
> I realize that putting ($!) using a trial/error approach is going to be
> futile. I'd appreciate some pointers into the tools I could use to get
> some idea of which expressions are building up huge thunks.

You problem is in

let bug = ($!) fileContents2Bug str

($!) evaluate only WHNF and you need NF. Above just evaluate to first 
char in a file, not to all content. To fully evaluate 'str' you need 
something like

let bug = Control.DeepSeq.rnf str `seq` fileContents2Bug str







More information about the Haskell-Cafe mailing list