F# is a .NET language from Microsoft Research that extends functional programming with imperative and object-oriented features. It is type-safe, and its performance is similar to that of nonfunctional languages, such as Visual Basic .NET and C#. Furthermore, it has been integrated into Visual Studio so that tools such as the debugger and the database explorer are readily available to F# programmers. Readers experienced with objective Caml (OCaml) are provided with a compatibility library, which is a serious attempt to help OCaml programmers jump into the .NET world.
The book is comprised of 13 chapters, which I have organized into the following logical parts: getting started (chapters 1 and 2), language features (chapters 3 through 6), interfacing with the .NET framework (chapters 7 through 10), and miscellany (chapters 11 through 13).
In the first part, Pickering reports on the much-heralded advantages of functional programming, and provides a few details on installing F#. The second part provides a short introduction to F# from three complementary points of view: purely functional features, imperative features, and object-oriented features. The last chapter in this part reports on how to organize programs into modules, and how to annotate them with documentary comments, metadata (attributes in .NET’s terminology), and quoting code, which is a new feature in .NET that compiles parts of a program into a data structure called an expression tree instead of object code. In the third part, Pickering reports on: the F# native libraries, creating user interfaces for both desktop and Web applications, using files and databases, and writing distributed applications (with an emphasis on Web services). The last part reports on using fslex and fsyacc for building language analyzers, using the F# tool suite, and interfacing with other .NET languages.
In summary, I think that this is a good introduction to F#, and I find it very adequate for people who know little about such languages. Unfortunately, the chapters on interfacing with the .NET framework are very shallow, and I do not think they are easy to follow for programmers who are not proficient with the .NET platform. The explanations and the examples regarding technologies, such as ASP .NET, Windows Forms, and LINQ, are very brief and simple. They help proficient .NET programmers get an overall idea of how these technologies can be addressed by using F#, but they are not enough for a beginner to get started with the framework.