Skip to content

A sum type for the D programming language

License

Notifications You must be signed in to change notification settings

SigmaTauProject/sumtype

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sumtype

A sum type for modern D.

Features

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

Documentation

View online on Github Pages.

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)));

Open on run.dlang.io

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.

About

A sum type for the D programming language

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • D 99.8%
  • Shell 0.2%