[contest] Is a Cow an animal ++

Philippe Sigaud philippe.sigaud at gmail.com
Wed Sep 29 14:35:07 PDT 2010


On Wed, Sep 29, 2010 at 23:10, bearophile <bearophileHUGS at lycos.com> wrote:
> Philippe Sigaud:
>
>> If doing state passing like this is authorized, it might be doable
>> doing 11/11 with D, at the type level.
>
> From what I have seen this puzzle gives few rules, but then the implementation is quite free. It's not a true competition, with strict rules. I think the spirit of the game is to catch many violations at compile time, while keeping the program "useful".


I was wondering how you can 'return' two types from a template and
then use them independantly...
For example Eat!(Who, What) could be a template that returns two types
(let access them through .Who and .What) which are the new states.

But then, you can do that with CTFE too:

auto whoWhat = who.eat(what); // eat returns a Tuple!(Who, Eaten!What)
who2 = whoWhat[0];
eatenWhat = whoWhat[1];

(Damn, how I miss tuple extraction in D)

eatenWhat has type Eaten!What, which is different from What and is not
a food anymore.
So the compiler will catch:

who2.eat(eatenWhat);

at compile time.

The same idea can be used for slaughtering something twice, and such.
But to me, that's cheating (I'm not pretending miasma's code is
cheating. I am not fluent enough in Scala)


Philippe


More information about the Digitalmars-d mailing list