Is std.variant.visit not @nogc?
Paul Backus
snarwin at gmail.com
Mon Apr 9 15:59:32 UTC 2018
On Monday, 9 April 2018 at 07:07:58 UTC, Chris Katko wrote:
> On Monday, 9 April 2018 at 07:02:50 UTC, Hasen Judy wrote:
>> IMO, this is one more reason why sum-types should be built
>> into the language compiler, instead of being implemented in
>> user-space.
>
> +1. Any time you have to "create" a fundamental feature in a
> language... from inside the language itself... you're going to
> have confusing error messages, and a huge uphill battle.
I agree in general, but in this case it's actually completely
doable. In fact, I've done it myself: check out 'sumtype' on
code.dlang.org. You can replace 'Algebraic' with 'SumType' and
'visit' with 'match' in helxi's example, and everything Just
Works™:
import sumtype;
import core.stdc.stdio;
SumType!(T, string) fib_nth(T)(T n)
{
return n % 15
? n % 5
? n % 3
? SumType!(T, string)(n)
: SumType!(T, string)("Fizz")
: SumType!(T, string)("Buzz")
: SumType!(T, string)("Fizzbuzz");
}
void main() @nogc
{
foreach (i; 1 .. 101)
{
fib_nth(i).match!(
(string s) => printf("%s\n", s.ptr),
(int n) => printf("%i\n", n)
);
}
}
More information about the Digitalmars-d-learn
mailing list