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.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to