Well, the case of the built-in numeric types is somewhat different, but most functions automatically short circuit, since Haskell uses lazy evaluation. For instance, it's perfectly okay to define myAnd = foldr (&&) True Note that this terminates on infinite lists which contain False as a value: myAnd (False : repeat True) will evaluate to False pretty much immediately. - Cale On 25/06/05, kynn@panix.com <kynn@panix.com> wrote:
Some simplifications might help you here...
prodList [] = 1 prodList (0:xs) = 0 prodList (x:xs) = x * prodList xs
Simplified: prodList xs = foldl (*) 1 xs
But my original at least made some provision for short circuiting the whole operation if the list contained a 0. As far as I can figure, fold, map, etc., are not suitable for any situation in which short-circuiting would be desirable (e.g. and, or, etc.). Am I wrong?
(I realize that, given that the function product is already available, there is no point in defining my function prodList above, but my question is a more general one, having to do with how best to implement short-circuiting.)
Thanks!
kj
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe