Chapter 7. Complex Composite Types


  • Understanding type abbreviations

  • Working with enums

  • Creating discriminated unions

  • Understanding structs

  • Working with record types

Complex composite types serve as a bridge between the simple composite types explored in Chapter 5, such as tuples, options, and the collection types (list, array, sequence, set, and map), and the more traditional class types explored in Chapter 8. Unlike the simple composite type made up of multiple elements of a single type, the complex composite type is marked by the multiple parts that form the complex composite type, such as individual elements made up of other types.


One of the drawbacks to tuples is that the tuple, in its basic form, remains unnamed — lexically speaking, it's harder to talk about passing string * string * int * float types around than it is to talk about passing around instances of Employee.

Fortunately, F# alleviates this problem (for more than just tuples) by allowing for type abbreviations, which actually are nothing more than name declarations for existing type names:

type MenuItem =
    string * string * float

type RestaurantMenu =
    MenuItem list

In all other respects, the types behave as they've done normally:

let diner : RestaurantMenu = [
    ("Grand Slam", "Two eggs, two bacon, three hotcakes",2.99);
    ("Chicken strips", "Five strips and sauce", 3.99)
for (name, desc, price) in diner do
    System.Console.WriteLine("{0} costs {1}", name, price)

It's important to note ...

Get Professional F# 2.0 now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.