define-type creates an algebraic data type and its constructors.
Syntax
⟨repr-directive⟩?
⟨derive-directive⟩?
(define-type ⟨type⟩
⟨docstring⟩?
⟨constructor⟩...)
;; ⟨type⟩ := ⟨name⟩
;; | (⟨name⟩ ⟨type-var⟩...)
;; ⟨constructor⟩ := ⟨constructor-name⟩ ⟨docstring⟩?
;; | (⟨constructor-name⟩ ⟨docstring⟩? ⟨arg-type⟩ ...)
Semantics
- Constructors are values/functions which construct the data type.
- The form supports docstrings and
derive/reprdirectives. - It is the main way to define tagged unions and sum types in Coalton.
- Types and constructors are conventionally written in CamelCase.
Example
(define-type (Tree :a)
(Leaf :a)
(Branch (Tree :a) (Tree :a)))