
Foreword
For the past couple of decades, object-oriented programming has dominated the industry, its ability to hide complexity and provide structure and intuition providing a major boost to software development.
Not all kinds of complexity submit willingly to the mechanisms of encapsulated shared state and virtual methods. Some domains of computation, analysis, and transformation were not much helped by objects, and, looming bigger every day, the demand for concurrency is placing new pressure on the object-oriented paradigm.
From an obscure existence in academic institutions and research labs, functional and declarative techniques have gradually crept into mainstream languages to counter those challenges. In C#, for instance, we added generics, anonymous functions, and monadic query expressions. But a full-fledged commercial functional programming language with the extensive libraries and tools that are crucial to developer productivity has been lacking. I believe F# is a magnificent milestone: one of those turning points that we will look back on and say that’s when we turned the corner.