[Haskell-cafe] A systematic method for deriving a defintion of foldl using foldr?

R J rj248842 at hotmail.com
Wed Mar 11 14:24:55 EDT 2009

foldl and foldr are defined as follows:

  foldr                :: (a -> b -> b) -> b -> [a] -> b
  foldr f e []         =  e
  foldr f e (x : xs)   =  f x (foldr f e xs)

  foldl                :: (b -> a -> b) -> b -> [a] -> b
  foldl f e []         =  e
  foldl f e (x : xs)   =  foldl f (f e x) xs

1.  I understand how these definitions work, and yet I'm unable to implement foldl in terms of foldr.  What's a systematic approach to identifying such an implementation, and what is the implementation?

2.  I believe that the reverse implementation--namely, implementing foldr in terms of foldl--is impossible.  What's the proof of that?

3.  Any advice on how, aside from tons of practice, to develop the intuition for rapidly seeing solutions to questions like these would be much appreciated.  The difficulty a newbie faces in answering seemingly simple questions like these is quite discouraging.

Express your personality in color! Preview and select themes for Hotmail®. 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090311/c07cfd68/attachment.htm

More information about the Haskell-Cafe mailing list