ava/notes/enumerations.md

873 B

Enumerations

Enumerations are sum types.

Syntax

An enumeration must have at least one type member.

enum <name>
    -- records or objects...
end enum

Objects

An object is a special type of singleton. Much like the () type, each object is an instance of itself (and the only instance of itself). Objects are used to represent enumeration cases that do not have any inputs.

Example: The Option Type

given A
enum Option
    given A
    record Some (value: A)
    object None
end enum

given A
fn some: (a: A) => Some[A]
    Some (a)
end fn

Example: The Either Type

given L, R
enum Either
    given L
    record Left (value: L)

    given R
    record Right (value: R)
end enum

given L
fn left: (left: L) => Either[L, Nothing]
    Left(left)
end fn

given R
fn right: (right: R) => Either[Nothing, R]
    Right(right)
end fn