Chapter 15. Type Providers
Connecting to an SQL database or retrieving data from a web service might seem like a mundane thing to do in a programming language, but the mechanism F# uses for connecting to data providers sets it apart from other languages by the use of a feature called type providers. But before we can look at the power and flexibility type providers bring to the F# language, let’s look at why they are needed.
Typed Data Versus Typed Languages
F# is a statically typed programming language and goes well out of its way to encourage F# programmers to embrace types. For example, not many other languages have features like:
Type abbreviations such as
type NodeList = List<Node>allowing you to create ad hoc types.Units of measure such as
32.0f<Fahrenheit>that allow you to further specialize primitive data types.
But F#’s type system has a crucial limitation. (Actually, this is true for most any programming language.) Types only describe the shape of data within programs. The outside world—and the data it contains—is also typed, but in a way that is completely divorced from the program code.
The API for opening XML documents just returns a generic XElement back, even if the underlying document
contains data with a well-known structure or schema.
The API for reading a web request’s response just returns a byte buffer, which could represent JSON, an XML SOAP message, or a custom binary format such as a Protocol Buffer.
If protobufs and JSON are familiar to you, then you should immediately ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access