Chapter 10Language extensions

10Generalized algebraic datatypes

Generalized algebraic datatypes, or GADTs, extend usual sum types in two ways: constraints on type parameters may change depending on the value constructor, and some type variables may be existentially quantified. They are described in chapter 7.

(Introduced in OCaml 4.00)

constr-decl::= ...  
 constr-name:  [ constr-args-> ]  typexpr
 
type-param::= ...  
  [variance] _

Refutation cases. (Introduced in OCaml 4.03)

matching-case::= pattern  [whenexpr] ->  expr
 pattern->.

Explicit naming of existentials. (Introduced in OCaml 4.13.0)

pattern::= ...  
 constr(type  {typeconstr-name}+)(  pattern)