Other OOP languages came earlier and later, but none are quite so thorough. It does, though, have many features in common with functional languages, and in some respects is even more powerful than many functional languages. Lamentably, this language is first-order only. Functions cannot be passed as arguments and assigned to variables. It does have a very rich and strong typing system, including enumerated types.
Procedures are first-class data objects.
This could very well be the target of a functional language compiler. Lambda Calculus Many papers have been written on the feasability of using the lambda calculus as a programming language. Extensions have been proposed, changes, additions, etc. There are different versions of the lambda calculus, namely the typed lambda calculus and the lazy lambda calculus.