On Sunday, 6 May 2018 at 19:18:02 UTC, Paul Backus wrote:
SumType is a generic sum type for modern D. It is meant as an
alternative to `std.variant.Algebraic`.
Features:
- Pattern matching, including support for structural matching
(*)
- Self-referential types, using `This`
- Works with `pure`, `@safe`, `@nogc`, and `immutable` (*)
- Zero runtime overhead compared to hand-written C
- No heap allocation
- Does not rely on runtime type information (`TypeInfo`) (*)
Starred features (*) are those that are missing from
`Algebraic`.
Code examples are available in the documentation (linked below).
New in this release:
- The list of types allowed in a sum type is now public
- Implicit qualifier conversions are now allowed in pattern
matching
- Better code examples in the documentation
This library is a work in progress. If you have a use case
you'd like to see supported, or an API you'd like to see
implemented, please get in touch!
Documentation: https://pbackus.github.io/sumtype/sumtype.html
DUB: https://code.dlang.org/packages/sumtype
Github: https://github.com/pbackus/sumtype
Nice.
I've written something similar in LightAlgebraic at
https://github.com/nordlow/phobos-next/blob/master/src/vary.d#L30
which is also significantly faster than `std.typecons.Algebraic`.
Has the same features as SumType except for
- Self-referential types, using `This` and
- pattern matching
Note that the `memoryPacked` flag being `true` hasn't been
thoroughly tested.
Your're free to copy an ideas or features in `LightAlgebraic`
into `SumType`.