Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

werediver/sum_types.dart

Open more actions menu

Repository files navigation

Build Status sum_types version sum_types_generator version

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(),
      );
}

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.

About

A code generator enabling sum-types in Dart

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  
Morty Proxy This is a proxified and sanitized view of the page, visit original site.