
On Fri, Mar 12, 2010 at 09:44:18AM -0500, Ron Leisti wrote:
Does this have any implications say, for using infinite data structures? When we can we assume laziness (in order to use abstractions like infinity), and when can we not?
Not really. Personally, I find this thread a bit pedantic; at some point it's good to understand the finer points of the Haskell standard, but this really has almost no bearing on beginners. Use lazy, infinite data structures to your heart's content. =) -Brent
On Fri, Mar 12, 2010 at 9:39 AM, Thomas Davie
wrote: On 12 Mar 2010, at 14:33, Ozgur Akgun wrote:
On 12 March 2010 14:28, Thomas Davie
wrote: On 12 Mar 2010, at 14:25, Salil Wadnerkar wrote:
On Fri, Mar 12, 2010 at 10:21 PM, Ozgur Akgun
wrote: Another boring variant from me then.
isHomogeneous xs = all (first==) xs
where first = head xs
Shouldn't head xs give an exception on an empty list?
An error, and only if it's evaluated. Lazy evaluation means it's not evaluated here. Of course another non-strict algorithm *might* evaluate head xs here, so this version won't work in all possible Haskell implementations, only the current ones which use lazy evaluation. Bob
So we need to make sure our code would work in a strict environment, even though we are using a lazily evaluated language, just in case if someone comes up with a not-that-lazy implementation of haskell?
If I was thinking this way, I would just stop using haskell at all.
Not quite, you need to make sure your code works in *all* non-strict evaluation models. Lazy evaluation is not the only non-strict evaluation method, another implementation of non-strict semantics might actually evaluate head xs. Bob _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners