
Thomas Davie wrote:
Salil Wadnerkar wrote:
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.
Nope, this works for any non-strict implementation. It can be deduced from the Haskell98 language standard that all has the property all ⊥ [] = True (Non-strict semantics doesn't tell you anything about time and space behavior, though; that's where you need the information that the compiler is using lazy evaluation.) Regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com