
Simon Peyton-Jones wrote:
1. Small examples of actual code. The goal here is (a) to convey a visceral idea of what functional programming *is*, rather than just assume the audience knows (they don't), and (b) to convey an idea of why it might be good. Here is one I came across in the last few days. I was reviewing some code in Java, and it contained a function that looked through a list of Foo instances for the latest update. I don't actually speak Java, but it went something like this:
// Get the Foo that was most recently updated. Foo latestUpdate (Iterator <Foo> iterator) { long latestTimeSoFar = 0; Foo latestFooSoFar = Null; while (iterator.hasNext()) { item = iterator.getNext(); if (item.updateTime > latestTimeSoFar) { latestTimeSoFar = item.updateTime; latestFooSoFar = item; } } return latestFooSoFar; } This takes an iterator over some collection of Foos and finds the one with the highest value of updateTime. 9 lines of code, or 12 with the closing curly brackets. In Haskell this is so short and obvious you probably wouldn't bother declaring it as a function, but if you did, here it is: -- Find the Foo that was most recently updated. latestUpdate :: [Foo] -> Foo latestUpdate foos = maximumBy (comparing updateTime) foos Of course you could always write it in point-free format, but I think that would be over-egging things. Paul.