Conceptually the content of this book can be divided into three major sections. The first is a well constructed overview of Haskell which, though not suitable as a primary tutorial, is organized in a building block style that clearly explains the core concepts of the language and their syntax. Examples are of minimal complexity and fit each purpose well while remaining free of yet unintroduced material. The other two sections, theory and implementation, are interleaved to present the material in a constructive way. The introduction to lambda calculus marks the first deviation from a pragmatic study of Haskell, however, proofs are largely omitted leaving mostly definitions, relevant theorems, and explanations. This book served as my introduction to lambda calculus and I found it somewhere between impenetrable and relaxing, which is to say that it was very helpful despite requiring a second read. The chapter closes with a desugaring of Haskell into the simpler constructs of lambda calculus. Next the properties of applicative languages are studied and implemented (in Haskell) on a SECD machine. Then lazy evaluation is studied and techniques of implementation such as SECD, graph reduction, SKI-combinators, and the G-Machine are covered. Following this is an overview of program transformations and optimizations with a brief summary of ongoing work in the field. The three conceptual topics; language, theory, and implementation are covered uniformly so there is a decreasing completeness to the Haskell presentations as abstractions pile up e.g. there is no concrete implementation of lazy evaluation. Instead the operation of machines is described with graphics or combinators in the notation of lambda calculus. This book covers implementation adequate for an intermediate command of Haskell while serving as an excellent introduction to the theory behind functional programming.