Thread overview
Alpha renaming in types is finally here
Jun 08, 2015
deadalnix
Jun 08, 2015
Timon Gehr
Jun 08, 2015
Timon Gehr
Jun 09, 2015
weaselcat
June 08, 2015
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
June 08, 2015
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.
June 08, 2015
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
June 08, 2015
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.)
June 08, 2015
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

June 08, 2015
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
>

June 09, 2015
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.