# Built-in Variants

## Lists

OCaml's built-in list data type is really a recursive, parameterized variant. It is defined as follows:

type 'a list = [] | :: of 'a * 'a list


So list is really just a type constructor, with (value) constructors [] (which we pronounce "nil") and :: (which we pronounce "cons").

## Options

OCaml's built-in option data type is really a parameterized variant. It's defined as follows:

type 'a option = None | Some of 'a


So option is really just a type constructor, with (value) constructors None and Some. You can see both list and option defined in the core OCaml library.