Functional Programming for the Object Oriented Programmer