## ML records and variant types

These examples show two ways of constructing new types in OCaml: records and variant types.

```
(* C:\Documents and Settings\Default\Desktop\4651\examples\types.ml *)
(* a record type: specifies components *)
type color = {red: int; green: int; blue: int};;
let yellow = {red = 255; green = 255; blue = 0};;
let inverse c = {red = 255 - c.red; green = 255 - c.green; blue = 255 - c.blue};;
(* a function defined without pattern-matching *)
let isBlue c = if c.blue > 0 then true else false;;
isBlue yellow;;
isBlue (inverse (yellow));;
(* same function with pattern-matching *)
let isBlue = function
{red=r; green=g; blue=0} -> false
| _ -> true;;
isBlue yellow;;
isBlue (inverse (yellow));;
(* a variant type: specifies alternatives *)
type 'a list = Empty | Node of 'a * 'a list;;
let emptylist = Empty;;
let mylist = (Node (5, (Node (3, Empty))));;
let isEmpty = function
Empty -> true
| _ -> false;;
isEmpty emptylist;;
isEmpty mylist;;
let rec countList = function
Empty -> 0
| Node( _ , l) -> 1 + countList (l);;
countList Empty;;
countList mylist;;
```

This is an example from CSci 4651 course.
The views and opinions expressed in this page are strictly those of the page author. The contents of this page have not been reviewed or approved by the University of Minnesota.