Cover by Chris Smith

Safari, the world’s most comprehensive technology and business learning platform.

Find the exact information you need to solve a problem on the fly, or go deeper to master the technologies and skills you need to succeed

Start Free Trial

No credit card required

O'Reilly logo

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 ...

Find the exact information you need to solve a problem on the fly, or go deeper to master the technologies and skills you need to succeed

Start Free Trial

No credit card required