Functional Programming for the Object-Oriented Programmer