[Haskell-cafe] Need some advice around lazy IO

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Mon Mar 18 11:38:46 CET 2013


On 18 March 2013 21:01, Konstantin Litvinenko <to.darkangel at 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



-- 
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
http://IvanMiljenovic.wordpress.com



More information about the Haskell-Cafe mailing list