An interesting technique for the implementation of functional languages is the use of combinators, special functionals on which all abstractions can be expressed. This project page is intended to collect all of my projects on combinator-based implementations of functional languages.
Currently, I've only made one functional language that uses combinator graph reduction techniques: Lazy-L. This is basically an implementation of Alonzo Church's pure untyped lambda calculus using the S, K, and I combinators. Functions are all there is in here: everything must be expressed in terms of functions. To express numbers you need to use Church numerals, which are expressions of numbers as functions. To express other data types, encodings of the data must be found in terms of functions. A methods for expressing various types of data in the pure lambda calculus can be found in Chapter 3 of John Harrison's course on Functional Programming.
Other than a teaching vehicle for students learning the lambda calculus or combinator logic, it can also be used, with a little tweaking, as a compiler from the lambda calculus to Unlambda. See the README file in the distribution for information on how to use it.
You need Objective Caml to build and use this interpreter.
You can get the source for lazy-l from the SourceForge Project Page. I do not maintain any binary distributions at this time.
I want your feedback on these programs. Email me here for any questions or comments.