> > 18.09.2012, 16:32, "Jan Stolarek" <[email protected]>: > > Hi list, > > > > I have yet another question about folds. Reading here and there I > encountered statements that > > foldr is more important than foldl, e.g. in this post on the list: > > http://www.haskell.org/pipermail/haskell-cafe/2012-May/101338.html > > I want to know are such statements correct and, if so, why? I am aware > that foldl' can in some > > circumstances operate in constant space, while foldr can operate on > infinite lists if the folding > > function is lazy in the second parameter. Is there more to this subject? >
Basically the difference is that foldr is really the natural catamorphism for the list type, that is for a type like : data MyType = Zero | One A | Two B C | Recurse MyType the natural catamorphism is a function that takes four arguments by which it will replace the four constructor so as to deconstruct a value of MyType : myTypeCata :: r -> (A -> r) -> (B -> C -> r) -> (r -> r) -> (MyType -> r) myTypeCata z o t re Zero = z myTypeCata z o t re (One a) = o a myTypeCata z o t re (Two b c) = t b c myTypeCata z o t re (Recurse myType) = re (myTypeCata z o t re myType) So foldr is the natural catamorphism for the list type and foldl is not. -- Jedaï
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
