[Haskell-cafe] enforcing strictness on arbitrary subexpressions

Matthias Fischmann 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.)

cheers,
matthias



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
> <http://users.aber.ac.uk/afc/stricthaskell.html>.
> 
> 
> Udo.
> -- 
> Today is the tomorrow you worried about yesterday.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
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 mailing list