Records. A record is a tuple with named fields. In complex programs, having names for items is helpful. It helps us understand what a program is doing.
With simple syntax, we create records by labeling field names and types. A record is created automatically based on the fields we specify. We can copy records while changing these fields.
Primary example. Let us begin with this example. We use the type keyword to create a record type. We specify Name, Weight and Wings on the record. These are of types string, int and bool.
Start In the let statement we create a new record instance. We designate a cat with weight 12 and no wings.
Next In the next let statement, we create a dog. We copy the cat and change the name to "dog."
Finally We create a bird record by modifying both the Name and the Wings fields in a previous record.
type Animal = { Name:string; Weight:int; Wings:bool }
// Create an instance of Animal named cat.
let cat = { Name="cat"; Weight=12; Wings=false }
// Display the cat record.
printfn "%A" cat
// Display the Name, Weight and Wings properties.
printfn "%A" cat.Name
printfn "%A" cat.Weight
printfn "%A" cat.Wings
// Modify an existing record.// ... Set name to "dog."
let dog = { cat with Name="dog" }
printfn "%A" dog
let bird = { cat with Name="bird"; Wings=true }
printfn "%A" bird{Name = "cat";
Weight = 12;
Wings = false;}
"cat"
12
false
{Name = "dog";
Weight = 12;
Wings = false;}
{Name = "bird";
Weight = 12;
Wings = true;}
Not mutable. Fields in a record cannot be assigned. The F# compiler will report an error saying "This field is not mutable." We must use "with" to copy records, changing values in that way.
type ExampleRecord = { size:int; valid:bool }
let example = { size=10; valid=true }
// This causes an error: cannot be compiled.
example.size <- 20error FS0005: This field is not mutable
A review. Records have features of classes, like named fields, but are more similar to tuples. Their fields are immutable. And they provide special syntax for modification during copying.
Dot Net Perls is a collection of pages with code examples, which are updated to stay current. Programming is an art, and it can be learned from examples.
Donate to this site to help offset the costs of running the server. Sites like this will cease to exist if there is no financial support for them.
Sam Allen is passionate about computer languages, and he maintains 100% of the material available on this website. He hopes it makes the world a nicer place.