An Introduction To Functional Programming Through Lambda Calculus by Greg Michaelson