addle 0.1.0 - argument-dependent lookup for UFCS functions

Simen Kjærås simen.kjaras at gmail.com
Mon Jun 22 12:53:16 UTC 2020


On Sunday, 21 June 2020 at 00:06:12 UTC, Paul Backus wrote:
>     import addle;
>     import std.range;
>
>     // Import a type from another module
>     import mylib: MyStruct;
>
>     // Define range primitives for MyStruct
>     bool empty(MyStruct a) { return false; }
>     string front(MyStruct a) { return "ok"; }
>     void popFront(MyStruct a) {}
>
>     // MyStruct isn't considered an input range, because
>     // std.range can't see our UFCS methods.
>     static assert(isInputRange!MyStruct == false);
>
>     // ...but extending it makes those methods visible.
>     static assert(isInputRange!(Extended!MyStruct));
>
>     void main()
>     {
>         import std.range: take, only;
>         import std.algorithm: equal;
>
>         MyStruct myStruct;
>
>         // Now we can use all of the standard range algorithms
>         assert(
>             myStruct.extended
>             .take(3)
>             .equal(only("ok", "ok", "ok"))
>         );
>     }

As a demonstration of what you can do in D, I love this. Maybe 
one day I'll even find a use for it. Good work!

--
   Simen


More information about the Digitalmars-d-announce mailing list