[Haskell-cafe] enforcing strictness on arbitrary subexpressions
fis at wiwi.hu-berlin.de
Fri Feb 17 04:05:30 EST 2006
Thanks Udo, that helped a lot.
I added the link to haskell.org. I couldn't find a proper place to
put it, so I added a page 'By topic' (still quite empty) linked from
the main page. (I hope that wasn't against any rules I missed; if
anybody objects please feel free to remove it.)
On Thu, Feb 16, 2006 at 01:10:14PM +0100, Udo Stenzel wrote:
> To: Matthias Fischmann <fis at wiwi.hu-berlin.de>
> Cc: haskell-cafe at haskell.org
> From: Udo Stenzel <u.stenzel at web.de>
> Date: Thu, 16 Feb 2006 13:10:14 +0100
> Subject: Re: [Haskell-cafe] enforcing strictness on arbitrary subexpressions
> Matthias Fischmann wrote:
> > I want to force evaluation on an arbitrary expression.
> > [...]
> > main :: IO ()
> > main = do
> > hPutStr stdout veryLongString -- lazy
> > veryLongString `seq` hPutStr stdout veryLongString -- still lazy?
> > (StrictThingy veryLongString) `seq` hPutStr stdout veryLongString -- strict (or at least i hope it is)
> The last line is actually equivalent to the second. Strict data
> constructors are defined in term of seq, and seq only forces the
> evaluation of the outermost constructor. So after seq'ing a string, it
> is either empty or has at least one element, but that element and the
> whole tail are still unevaluated. You have to recurse into the string
> to evaluate everything:
> > hPutStr stdout $ foldr seq veryLongString veryLongString
> There is no primitive to do this for arbitrary data types, but the
> DeepSeq type class comes close. You can find DeepSeq and some more
> hints on strict evaluation at
> Today is the tomorrow you worried about yesterday.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org//pipermail/haskell-cafe/attachments/20060217/6f14c87c/attachment.bin
More information about the Haskell-Cafe