sumtype 0.10.0: multiple dispatch

vitamin vit at vit.vit
Tue Oct 27 16:26:10 UTC 2020


On Thursday, 24 September 2020 at 02:28:11 UTC, Paul Backus wrote:
> SumType is a generic sum type for modern D. It is designed to 
> be an improved
> alternative to `std.variant.Algebraic`.
>
> Features:
>   - Pattern matching, including:
>     - Match-by-introspection ("if it compiles, it matches") (★)
>     - Multiple dispatch (★)
>   - Support for self-referential types (`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`) 
> (★)
>
> Starred features (★) are those that are missing from 
> `Algebraic`.
>
> The big new feature in this release is multiple dispatch: you 
> can pass multiple
> SumType arguments to a single `match` call, and it will pass 
> each of those
> SumTypes' values as a separate argument to the selected handler.
>
> If you're used to calling `match` with UFCS, the syntax for 
> passing multiple
> arguments may take some getting used to. I recommend the 
> following idiom:
>
>     bool sameDimensions(Point p1, Point p2)
>     {
>         // Set up your handlers first
>         alias doMatch = match!(
>             (Point2D _1, Point2D _2) => true,
>             (Point3D _1, Point3D _2) => true,
>             (_1, _2) => false
>         );
>
>         // Now make the actual call
>         return doMatch(p1, p2);
>     }
>
> Other improvements since 0.9.0, the last announced version:
>   - SumTypes can be used as keys in associative arrays
>   - isSumType!T is now true if T implicitly converts to a 
> SumType
>   - sumtype's license has been changed from MIT to Boost 1.0
>   - Member types with non-const `opEquals` overloads finally 
> work correctly
>   - Various other bug fixes and documentation improvements
>
> Links:
>   - Documentation: 
> https://pbackus.github.io/sumtype/sumtype.html
>   - DUB: https://sumtype.dub.pm
>   - Github: https://github.com/pbackus/sumtype

Hello,

Older version of sumtype accept this code:

void main(){
     import sumtype;
     alias Val = SumType!(bool);

     const bool b = true;
     Val val = b;  //fail in newest version
     val = b;      //fail in newest version
}

but new version need exact type:


void main(){
     import sumtype;
     alias Val = SumType!(bool);

     bool b = true;   //cannot be const
     Val val = b;
     val = b;
}

is it bug in new version or old version?


More information about the Digitalmars-d-announce mailing list