Joachim Breitner's Homepage
Drawing foldl and foldr
Often, someone wants to exhaling the difference between a left-fold and a right-fold, i.e. foldl
and foldr
in Haskell, you see a picture like the following
This is taken from the recently published and very nice “foldilocks” tutorial by Ayman Nadeem, but I have seen similar pictures before.
I always thought that something is not quite right about them, in particular the foldr
. I mean, they are correct, and while the foldl
one clearly conveys the right intuition, the foldr
doesn’t quite: it looks as if the computer would fast forward to the end of the list, and then start processing it. But that does not capture the essence of foldr
, which also starts at the beginning of the list, by applying its argument lazily.
And therefore, this is how I would draw this graph:
This way (at least to people from a left-to-right top-to-bottom culture), it becomes more intuitive that with foldr
, you are first looking at an application of the combinator to the first element, and then possibly more.
Have something to say? You can post a comment by sending an e-Mail to me at <mail@joachim-breitner.de>, and I will include it here.