[Haskell-cafe] Newbie question: mutually exclusive strict / lazy
daniel.is.fischer at web.de
Sat Feb 9 11:56:34 EST 2008
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
> 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?
Hope I remember correctly...
A function is strict in an argument, if whenever that argument is _|_, the
result is _|_, regardless of possible other arguments.
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.
More information about the Haskell-Cafe