D'oh, yeah that is better. You know, I actually had that and had expanded it because I was going to seq both the input and the result of the (+1), but punted on it and didn't switch back to the more compact format.

-Ross

On Jun 19, 2009, at 12:45 AM, Luke Palmer wrote:

On Thu, Jun 18, 2009 at 9:55 PM, Ross Mellgren <rmm- hask...@z.odi.ac> wrote: It looks offhand like you're not being strict enough when you put things back in the IORef, and so it's building up thunks of (+1)...

With two slight mods:


  go 0 = return ()
  go n = do modifyIORef ior (+1)
            go (n-1)

-->

  go 0 = return ()
  go n = do modifyIORef ior (\ x -> let x' = x+1 in x `seq` x')
            go (n-1)

Just a slight prettification of that line:

modifyIORef ior ((1+) $!)

Or applied prefix if you prefer. Prefix ($!) has the nice interpretation as the HOF that makes its argument into a strict function.

Luke


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to