
here are the descriptions for foldr and foldr1 foldr :: (a -> b -> b) -> b -> [a] -> b foldr1 :: (a -> a -> a) -> [a] -> a i'm trying to make sense of the a vs b in foldr, so here goes: foldr takes 3 arguments: 1. some function f, illustrated within () of type b 2. some value of type b 3. some list with elements of type a foldr applies f to each element of [a], computing a new function (f a) which is then applied to the item of type b, computing a result of type b, which is then combined with #2 (this would be the accumulator) finally, the net computation of foldr results in some item of type b. foldr1 takes 2 arguments: 1. some function g, illustrated within () of type a 2. some list with elements of type a foldr1 applies g to each element of [a], computing a new function (g a) which is then applied to a non-explicitly defined item of type a, computing a result also of type a. the net computation of foldr1 results in some item of type a. i know how i can use the folds in some situations, but explaining their type definitions to reveal how they work, is coming out pretty convoluted when i make the attempt. :( -- In friendship, prad ... with you on your journey Towards Freedom http://www.towardsfreedom.com (website) Information, Inspiration, Imagination - truly a site for soaring I's