Just to reiterate, F# runs primarily on .NET—and a great deal of .NET, such as the base class library and most NuGet packages, is written in C#. This chapter shows you the techniques for how best to consume such code as well as how to write F# APIs that C# developers can more easily consume.
You might have already realized this, but you already know how to consume C# from F#: pretty much the entire .NET framework class library is written in C#. This means that virtually all the APIs in the System namespace that are available out of the box are written in C#. F# has very good support for consuming such code, as we’ll see shortly.
The language designers of F# went to a great deal of effort to try to make consuming C# from F# as easy as possible. You can create instances of classes, call methods on them, and work with mutable, imperative code. This means that F# developers can benefit from the entire .NET library ecosystem while still being able to write functional-first code. Figure 11.1 illustrates some of these features.