sumtype 0.8.11
A sum type with pattern matching
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
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
, andimmutable
- 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.
- 0.8.11 released 5 years ago
- pbackus/sumtype
- MIT
- Copyright © 2018, Paul Backus
- Authors:
- Dependencies:
- none
- Versions:
-
1.2.8 2024-Mar-03 1.2.7 2022-Sep-05 1.2.6 2022-Jul-27 1.2.5 2022-Jun-21 1.2.4 2022-May-12 - Download Stats:
-
-
16 downloads today
-
144 downloads this week
-
603 downloads this month
-
165668 downloads total
-
- Score:
- 4.5
- Short URL:
- sumtype.dub.pm