On 18 March 2013 21:01, Konstantin Litvinenko <to.darkan...@gmail.com> wrote: > 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
Or use $!! from Control.DeepSeq. > > > > > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe -- Ivan Lazar Miljenovic ivan.miljeno...@gmail.com http://IvanMiljenovic.wordpress.com _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe