[Haskell-cafe] Shouldnt this be lazy too?

Seth Gordon sethg at ropine.com
Mon Sep 24 12:26:19 EDT 2007


Vimal wrote:
> Hi all,
> 
> I was surprised to find out that the following piece of code:
> 
>> length [1..] > 10
> 
> isnt lazily evaluated! I wouldnt expect this to be a bug, but
> in this case, shouldnt the computation end when the length function
> evaluation goes something like:
> 
>> 10 + length [11..]

I suspect that > when defined on integers is strict in both arguments, 
i.e., defined to not be lazily evaluated.

Even if it's not, when the reduction gets as far as "11 + length [12..] 
 > 10", *we* are smart enough to break apart the left-hand argument to 
(>) and inspect the arguments to (+), observe that "length" will never 
return a negative value, and concluded that we can stop evaluating.  But 
the implementation of (>) is not so smart.


More information about the Haskell-Cafe mailing list