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.

Attachment: signature.asc
Description: Digital signature

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

Reply via email to