> It must also be the case that xs is finite in length, because if it is
> infinite, then 'foldl f z xs' is bottom, while 'foldr f z xs' needn't be. This
> difference holds over into foldM implemented with each, where you can write
> something like:
>
> foldM (\f e -> if even e then Left (show e) else Right f) "no evens" [1..]
>
> and get an answer of 'Left "2"' with a foldr implementation, but bottom with a
> foldl implementation.
>
> This potentially translates into its own performance concerns, because in such
> monads, the computation can short-circuit upon finding a 'throw' when using
> the foldr implementation, but with the foldl implementation, you have to do at
> least a little shuffling of thunks for the entire list.
>
> -- Dan
> _______________________________________________
> Haskell-Cafe mailing list
>
Haskell-Cafe@haskell.org
>
http://www.haskell.org/mailman/listinfo/haskell-cafe>