Protocols vs Concepts?

Jacob Carlborg doob at me.com
Wed Nov 20 23:50:11 PST 2013


On 2013-11-21 00:48, Dicebot wrote:

> http://dlang.org/phobos/std_range.html#isInputRange
>
> This is the very point - for simple stuff like Phobos ranges defining
> interface types is actually more verbose than simply creating unique
> constraints and does not really bring much. It would have been much more
> interesting if `std.typecons.wrap` would have accepted structs though.

Currently isInputRange looks like this:

template isInputRange(R)
{
     enum bool isInputRange = is(typeof(
     (inout int = 0)
     {
         R r = void;       // can define a range object
         if (r.empty) {}   // can test for empty
         r.popFront();     // can invoke popFront()
         auto h = r.front; // can get the front of the range
     }));
}

void foo (R) (R r) if(isInputRange!(R))

I guess his suggestion would be something like this:

interface InputRange (R)
{
     @property bool empty ();
     void popFront ();
     ElementType!(R) front ();
}

void foo (R) (R r) if(implements!(InputRange!(R)))

Personally I think it's nice to have a concrete type like this.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list