Skip Menu |
Report information
Id: 131856
Status: rejected
Priority: 0/
Queue: perl6

Owner: Nobody
Requestors: cpan [at] zoffix.com
Cc:
AdminCc:

Severity: (no value)
Tag: (no value)
Platform: (no value)
Patch Status: (no value)
VM: (no value)



Subject: [@LARRY] Junctions don't junct when routine has a slurpy, leading to inconsistent behaviour with core routines
Download (untitled) / with headers
text/plain 1.3k
Originally taken from: https://stackoverflow.com/questions/45527881/why-does-and-affect-perl-6-junctions-differently For example, there's a difference between output of using `+` and using `~` with a Junction. With `+` you get a junction back, while `~` slurps and just .Strs (which .perls) the Junction: <Zoffix__> put any( 1, 3, 7 ) + 1; <Zoffix__> m: put any( 1, 3, 7 ) + 1; <camelia> rakudo-moar a91ad2: OUTPUT: «any(2, 4, 8)␤» <Zoffix__> m: put any( <h H> ) ~ 'amadryas'; <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")amadryas␤» The reason is the `~` has a slurpy candidate, while `+` doesn't: Junction as just an arg: <Zoffix__> m: sub foo (+@a) { @a.join: '|' }; say foo <h H>.any, 'amadryas' <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")|amadryas␤» <Zoffix__> m: sub foo (*@a) { @a.join: '|' }; say foo <h H>.any, 'amadryas' <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")|amadryas␤» Junctioned call: <Zoffix__> m: sub foo ($a, $b) { ($a, $b).join: '|' }; say foo <h H>.any, 'amadryas' <camelia> rakudo-moar a91ad2: OUTPUT: «any(h|amadryas, H|amadryas)␤» There are two question: 1) Is it possible to make slurpies junct, same as non-Mu scalar candidates? 2) If not, what do we do to make interface consistent; so that all the ops do the same thing?
This ticket needs an update because ~ was changed to DWIM with junctions, so all the examples in the ticket show something different (but the issue seems to be there).

I didn't go too deep into the details, but maybe these examples will do?

<AlexDaniel> m: sub foo ($a, $b) { ($a, $b).max }; say foo <h H>.any, ‘amadryas’
<camelia> rakudo-moar 4a32089fd: OUTPUT: «any(h, amadryas)␤»
<AlexDaniel> m: sub foo (*@a) { @a.max }; say foo <h H>.any, ‘amadryas’
<camelia> rakudo-moar 4a32089fd: OUTPUT: «amadryas␤»


On 2017-08-07 15:34:26, cpan@zoffix.com wrote:
Show quoted text
> Originally taken from:
> https://stackoverflow.com/questions/45527881/why-does-and-affect-perl-
> 6-junctions-differently
>
> For example, there's a difference between output of using `+` and
> using `~` with a Junction. With `+` you get a junction back, while `~`
> slurps and just .Strs (which .perls) the Junction:
>
> <Zoffix__> put any( 1, 3, 7 ) + 1;
> <Zoffix__> m: put any( 1, 3, 7 ) + 1;
> <camelia> rakudo-moar a91ad2: OUTPUT: «any(2, 4, 8)␤»
> <Zoffix__> m: put any( <h H> ) ~ 'amadryas';
> <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")amadryas␤»
>
> The reason is the `~` has a slurpy candidate, while `+` doesn't:
>
> Junction as just an arg:
> <Zoffix__> m: sub foo (+@a) { @a.join: '|' }; say foo <h H>.any,
> 'amadryas'
> <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")|amadryas␤»
> <Zoffix__> m: sub foo (*@a) { @a.join: '|' }; say foo <h H>.any,
> 'amadryas'
> <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")|amadryas␤»
>
> Junctioned call:
> <Zoffix__> m: sub foo ($a, $b) { ($a, $b).join: '|' }; say foo <h
> H>.any, 'amadryas'
> <camelia> rakudo-moar a91ad2: OUTPUT: «any(h|amadryas,
> H|amadryas)␤»
>
> There are two question:
> 1) Is it possible to make slurpies junct, same as non-Mu scalar
> candidates?
> 2) If not, what do we do to make interface consistent; so that all
> the ops do the same thing?


RT-Send-CC: perl6-compiler [...] perl.org
Download (untitled) / with headers
text/plain 1.8k
On Mon, 07 Aug 2017 15:34:26 -0700, cpan@zoffix.com wrote: Show quoted text
> Originally taken from: > https://stackoverflow.com/questions/45527881/why-does-and-affect-perl- > 6-junctions-differently > > For example, there's a difference between output of using `+` and > using `~` with a Junction. With `+` you get a junction back, while `~` > slurps and just .Strs (which .perls) the Junction: > > <Zoffix__> put any( 1, 3, 7 ) + 1; > <Zoffix__> m: put any( 1, 3, 7 ) + 1; > <camelia> rakudo-moar a91ad2: OUTPUT: «any(2, 4, 8)␤» > <Zoffix__> m: put any( <h H> ) ~ 'amadryas'; > <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")amadryas␤» > > The reason is the `~` has a slurpy candidate, while `+` doesn't: > > Junction as just an arg: > <Zoffix__> m: sub foo (+@a) { @a.join: '|' }; say foo <h H>.any, > 'amadryas' > <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")|amadryas␤» > <Zoffix__> m: sub foo (*@a) { @a.join: '|' }; say foo <h H>.any, > 'amadryas' > <camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")|amadryas␤» > > Junctioned call: > <Zoffix__> m: sub foo ($a, $b) { ($a, $b).join: '|' }; say foo <h
> H>.any, 'amadryas'
> <camelia> rakudo-moar a91ad2: OUTPUT: «any(h|amadryas, > H|amadryas)␤» > > There are two question: > 1) Is it possible to make slurpies junct, same as non-Mu scalar > candidates? > 2) If not, what do we do to make interface consistent; so that all > the ops do the same thing?
Hello, Past Zoffix. How do you imagine slurpies would junct even? Scanning all elements (including nested ones) for Junctions? Rejecting this as I don't see anything sane coming out from it. The `~` was made to behave the same as `+` now; though the overall goalpost was moved and there's now a problem with output routines: https://rt.perl.org/Ticket/Display.html?id=132549#ticket-history


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org