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 <[EMAIL PROTECTED]> > Cc: haskell-cafe@haskell.org > From: Udo Stenzel <[EMAIL PROTECTED]> > 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.
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe