Expert F# Front CoverThe book Expert F# is now available from book sellers! It's been shipping for a while, but there were some early reports of delivery delays so I delayed in announcing it.


As regular readers will know, the book is by myself, Adam Granicz and Antonio Cisternino. It offers a single resource to learning the 1.9.3 release of the language from Microsoft Research and is suitable for anyone with experience of either an existing functional or object-oriented language. It can be used as an introduction about to how to use functional programming techniques in conjunction with .NET, even if you code in C# or other .NET languages. It also contains a range of topics that will be of interest to anyone who enjoys their programming.


There will be an active errata: please notify us if you would like to add material to this. We're still to post some of the additional web-based material to , but you can already get all the code samples there and the extra material will come.


Some reviews have begun to appear, and we're looking forward to your feedback.  One review was written by my friend Brian Beckman but for some reason Amazon haven't posted it yet. Anyhow I've included it below - thanks Brian!

I tend to like books that teach something deep about programming, and just happen to be in some programming language or other. My all-time favorites are "Structure and Interpretation of Computer Programs," (SICP) by Abelson & Sussman; and "Introduction to Functional Programming (1st Ed.)," (IFP), by Bird and Wadler. Anyone who has had the privilege of reading these comes away with a lifetime supply of powerful insights. The first happens to be in Scheme, and the second happens to be in Miranda, but the languages merely serve the teaching, and the teaching transcends the languages.

This book is in the same class. Every page is packed with real code that begs to be keyboarded in, studied, tweaked, played with, and internalized. Most of the samples are short, accessible representatives of much larger whole classes of techniques, like parsing with combinators, or symbolic differentiation, or monadic disciplining of side effects, or metaprogramming (with and without reflection), or dispatch-on-type in a number of interesting variations. As such, they entice the programmer to dig much deeper.

F# is a unique and audacious experiment. It attempts to bring together things that are about as different as can be: object-oriented programming and functional programming. It builds on another audacious effort: .NET, which aims to provide a permanent foundation for object-oriented programming. When .NET was created, functional programming was not in the scope of the effort, so little support was built in. Subsequent successes of Haskell, OCaml, Erlang, and others, plus the now-obvious demands of parallel and distributed computing, changed the landscape. F# is a bold statement that "we can have the best of both worlds."

One should realize that learning .NET is a huge task on its own. Learning the functional style is challenging on its own because it is so different from the "ordinary" techniques one learns in BASIC, All The C's, Java, and so on. F# is a large language comprising multiple schools of programming and dozens of partially overlapping feature sets. But there is a way to make sense of it all, to make it sufficiently logical and consistent for human comprehension. This book will give you your best shot at it. It's a permanent member of my bookshelf.