Variant types are Reason's simple, idiomatic sum types. You can think of them as similar to enums (a limited set of values that are declared to form a type) from other languages, only more powerful because each variant case (possible alternative value) can optionally carry a payload inside it. Here's an example:
/* src/Ch05/Ch05_Variants.re */
type education = School | College | Postgrad | Other; /* (1) */
type poNumber = string;
type paymentMethod = Cash | PurchaseOrder(poNumber); /* (2) */
let bobEducation = College; /* (3) */
let bobPaymentMethod = Cash;
let jimEducation = Other;
let jimPaymentMethod = PurchaseOrder("PO-1234"); /* (4) */
This module defines some types for storing someone's education level and a payment method of either cash or purchase order:
- Variant type definitions start with type typeName = just like any other type of definition...