 # sumtype 0.7.1

A sum type with pattern matching

To use this package, run the following command in your project's root directory:

## sumtype

A sum type for modern D.

### Features

• Pattern matching, including support for structural matching
• Self-referential types, using `This`
• Works with `pure`, `@safe`, `@nogc`, `nothrow`, and `immutable`
• Zero runtime overhead compared to hand-written C
• No heap allocation
• Does not rely on runtime type information (`TypeInfo`)

### Documentation

`sumtype` uses adrdox to generate its documentation. To build your own copy, run the following command from the root of the `sumtype` repository:

``````path/to/adrdox/doc2 --genSearchIndex --genSource -o generated-docs src

``````

### Example

``````import std.math: approxEqual, cos, PI, sqrt;

struct Rectangular { double x, y; }
struct Polar { double r, theta; }
alias Vector = SumType!(Rectangular, Polar);

pure @safe @nogc nothrow
double length(Vector v)
{
return v.match!(
rect => sqrt(rect.x^^2 + rect.y^^2),
polar => polar.r
);
}

pure @safe @nogc nothrow
double horiz(Vector v)
{
return v.match!(
rect => rect.x,
polar => polar.r * cos(polar.theta)
);
}

Vector u = Rectangular(1, 1);
Vector v = Polar(1, PI/4);

assert(length(u).approxEqual(sqrt(2.0)));
assert(length(v).approxEqual(1));
assert(horiz(u).approxEqual(1));
assert(horiz(v).approxEqual(sqrt(0.5)));

``````

### Installation

If you're using dub, add the sumtype package to your project as a dependency.

Alternatively, since it's a single, self-contained module, you can simply copy `sumtype.d` to your source directory and compile as usual.

• Registered by Paul Backus
• 0.7.1 released 12 months ago
• pbackus/sumtype
• MIT
Authors:
• Paul Backus
Dependencies:
none
Versions:
 0.9.3 2019-Nov-22 0.9.2 2019-Oct-09 0.9.1 2019-Sep-30 0.9.0 2019-Sep-28 0.8.13 2019-Sep-11