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").
The only reason you can't write that definition yourself in your own
code is that the compiler restricts you to constructor names that begin
with initial capital letters and that don't contain any punctuation
(other than _
and '
).
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.