An Introduction to Functional Programming Through Lambda Calculus
This book encourages learning by abstraction from concrete examples, of understanding calculus through actually ‘doing’ it in an explicitly operational manner, and of gaining oversight of the layers between a simple, foundational system and a rich language of variegated constructs and structures.