sum_types

Creator: coderz1093

Last updated:

Add to Cart

Description:

sum types

sum_types and sum_types_generator #
sum_types and sum_types_generator packages together define a code generator enabling sum-types in Dart.
NOTE: v0.2.0 is a major update with backward-incompatible changes.
Example #
In example/lib/src/ you can find a few sum-type declarations and the code generated for them.
This one models the natural numbers (with zero):
import 'package:meta/meta.dart';
import 'package:sum_types/sum_types.dart';

@SumType()
class Nat extends _$Nat {
const Nat.zero() : super(zero: const Unit());
const Nat.next(Nat value) : super(next: value);

Nat operator +(Nat other) => this.iswitch(
zero: () => other,
next: (next) => Nat.next(next + other),
);

int toInt() => this.iswitch(
zero: () => 0,
next: (next) => 1 + next.toInt(),
);
}
copied to clipboard
Features #
Core:

✅ Const case-constructors (const Nat.zero())
✅ Extensible sum-types (Nat.toInt())
✅ Nested sum-types
✅ Recursive sum-types (Case<_Nat>(name: "next") → Nat.next(Nat.zero()))
✅ Generic sum-types (Either<Left, Right>)
✅ Exhaustive in-line iswitch
✅ Inexhaustive in-line iswitcho (with otherwise: case)

Sugar:

✅ No-payload cases (Case<void>(name: "zero") → Nat.zero())
✅ Default case-names (Case<String>() → JSON.string("some"))

Trivia:

✅ Equality test
✅ Hash function
✅ To string conversion

Serialization-deserialization support through product-types interoperability:

✅ Deserialization support (NatRecord<Self>, Nat.load<T extends NatRecord<T>>(T rec))
✅ Serialization support (Nat.dump<T>(T Function({Unit zero, T next} make)))

Development #
Find the upcoming development plans in the project planner.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.