Am Samstag, 9. Februar 2008 17:33 schrieb Peter Verswyvelen: > Consider the function > > cond x y z = if x then y else z > > I guess we can certainly say cond is strict in x. > > But what about y and z? > > If x is true, then cond is strict in y > If x is false, then cond is strict in z > > So we can't really say cond is lazy nor strict in its second or third > argument. > > Of course, this is the case for many more functions, but in the case of > the if-then-else primitive, does the strictness analyzer make use of this > "mutually exclusive strictness" fact? > > Cheers, > Peter
Hope I remember correctly... A function is strict in an argument, if whenever that argument is _|_, the result is _|_, regardless of possible other arguments. Since if True then 0 else _|_ == 0, if-then-else is nonstrict in the third argument, similarly if False then _|_ else 0 == 0, so if-then-else is nonstrict in the second argument. Cheers, Daniel _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe