www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Alpha renaming in types is finally here

reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
I've been wondering for a good while whether it's possible with what we 
have. Looks like it is, modulo some gnarly hacks in introspecting 
function types.

https://github.com/D-Programming-Language/phobos/pull/3394


Destroy!

Andrei
Jun 08 2015
next sibling parent reply "deadalnix" <deadalnix gmail.com> writes:
On Monday, 8 June 2015 at 07:51:24 UTC, Andrei Alexandrescu wrote:
 I've been wondering for a good while whether it's possible with 
 what we have. Looks like it is, modulo some gnarly hacks in 
 introspecting function types.

 https://github.com/D-Programming-Language/phobos/pull/3394


 Destroy!

 Andrei
Kind of like when I discovered this mail client written in awk, I'm both amazed and horrified.
Jun 08 2015
parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 6/8/15 1:51 AM, deadalnix wrote:
 On Monday, 8 June 2015 at 07:51:24 UTC, Andrei Alexandrescu wrote:
 I've been wondering for a good while whether it's possible with what
 we have. Looks like it is, modulo some gnarly hacks in introspecting
 function types.

 https://github.com/D-Programming-Language/phobos/pull/3394


 Destroy!

 Andrei
Kind of like when I discovered this mail client written in awk, I'm both amazed and horrified.
Yah, the function parameter storage classes are gnarly to handle. The other type constructors line up quite nice. -- Andrei
Jun 08 2015
prev sibling next sibling parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 06/08/2015 09:51 AM, Andrei Alexandrescu wrote:
 I've been wondering for a good while whether it's possible with what we
 have. Looks like it is, modulo some gnarly hacks in introspecting
 function types.

 https://github.com/D-Programming-Language/phobos/pull/3394


 Destroy!

 Andrei
- This is not alpha renaming. Alpha renaming renames a variable at the point it is bound and updates all occurrences of the variable. Alpha renaming does not change the term it is applied to. http://en.wikipedia.org/wiki/Lambda_calculus#.CE.B1-conversion This is type replacement. - How do you use it to create recursive types using algebraic? (Assuming that's what your comment refers to.)
Jun 08 2015
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 6/8/15 5:43 AM, Timon Gehr wrote:
 On 06/08/2015 09:51 AM, Andrei Alexandrescu wrote:
 I've been wondering for a good while whether it's possible with what we
 have. Looks like it is, modulo some gnarly hacks in introspecting
 function types.

 https://github.com/D-Programming-Language/phobos/pull/3394


 Destroy!

 Andrei
- This is not alpha renaming. Alpha renaming renames a variable at the point it is bound and updates all occurrences of the variable. Alpha renaming does not change the term it is applied to. http://en.wikipedia.org/wiki/Lambda_calculus#.CE.B1-conversion This is type replacement.
I'm using the term a bit loosely but I think appropriately.
 - How do you use it to create recursive types using algebraic? (Assuming
 that's what your comment refers to.)
I've added documentation and examples to http://erdani.com/d/phobos-prerelease/std_variant.html#.Algebraic. Feedback appreciated. Thanks, Andrei
Jun 08 2015
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 06/08/2015 06:23 PM, Andrei Alexandrescu wrote:
 On 6/8/15 5:43 AM, Timon Gehr wrote:
 On 06/08/2015 09:51 AM, Andrei Alexandrescu wrote:
 I've been wondering for a good while whether it's possible with what we
 have. Looks like it is, modulo some gnarly hacks in introspecting
 function types.

 https://github.com/D-Programming-Language/phobos/pull/3394


 Destroy!

 Andrei
- This is not alpha renaming. Alpha renaming renames a variable at the point it is bound and updates all occurrences of the variable. Alpha renaming does not change the term it is applied to. http://en.wikipedia.org/wiki/Lambda_calculus#.CE.B1-conversion This is type replacement.
I'm using the term a bit loosely but I think appropriately. ...
Well, no, there is no binding site involved. You could use ReplaceType or SubstituteType.
 - How do you use it to create recursive types using algebraic? (Assuming
 that's what your comment refers to.)
I've added documentation and examples to http://erdani.com/d/phobos-prerelease/std_variant.html#.Algebraic. Feedback appreciated. ...
Oh, it is used in the implementation. That clears it up. Now, how do I declare mutually recursive types? :o)
 Thanks,

 Andrei
Jun 08 2015
prev sibling parent "weaselcat" <weaselcat gmail.com> writes:
On Monday, 8 June 2015 at 07:51:24 UTC, Andrei Alexandrescu wrote:
 I've been wondering for a good while whether it's possible with 
 what we have. Looks like it is, modulo some gnarly hacks in 
 introspecting function types.

 https://github.com/D-Programming-Language/phobos/pull/3394


 Destroy!

 Andrei
almost missed the secondary(?) part of this PR. http://erdani.com/d/phobos-prerelease/std_typecons.html#.ReplaceType this looks incredibly useful, I often find myself using ugly templates to do this.
Jun 09 2015